Я работаю с Windows Kinect в C ++.
Я пытаюсь проверить, прошла ли правая рука справа налево, как вытирающее движение.
Я пытаюсь работать с std :: async, потому что мне нужно возвращаемое значение метода.
Я уже погуглил ошибку, которую получил, и понятия не имею, в чем дело.
Мои 2 метода, которые я использую:
bool NuiSkeletonStream::timeNext(clock_t start)
{
clock_t end, diff;
end = clock();
diff = end - start;
while(diff <= 1500)
{
if(diff >= 1500)
{
if(i_rhx == i_lsx && i_rhy == i_lsy)
{
return true;
}
else
{
return false;
}
}
else
{
diff = end - start;
end = clock();
}
}
}
bool NuiSkeletonStream::runNext()
{
clock_t start;
// std::thread compare(timeNext(start),std::move(xNext));
for (int i = 0; i < NUI_SKELETON_COUNT; i++)
{
if (m_skeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED)
{
i_rhx = m_skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT].x*5+5;
i_rhy = m_skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT].y*5+5;
//i_rhz = (m_skeletonFrame.SkeletonData[i].SkeletonPositions[11].z*10)-10;
i_rsx = m_skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_RIGHT].x*5+5;
i_rsy = m_skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_RIGHT].y*5+5;
i_lsx = m_skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_LEFT].x*5+5;
i_lsy = m_skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_SHOULDER_LEFT].y*5+5;
if(i_rhx == i_rsx && i_rhy == i_rsy)
{
start = clock();
auto f1 = std::async(timeNext(start));
}
}
}
У меня есть следующая ошибка:
Error 24 error C2440: 'return' : cannot convert from 'std::_Do_call_ret<_Forced,_Ret,_Funx,_Btuple,_Ftuple>::type' to '_Ret'
С выражением
std::async(timeNext(start));
ты на самом деле вызов timeNext
себя и передавая его возвращаемое значение (а bool
) чтобы std::async
,
Если вы видите, например, эта ссылка вы увидите, что std::async
Функция принимает функцию в качестве первого аргумента, а затем аргументы функции.
Так что вы должны сделать
std::async(&NuiSkeletonStream::timeNext, this, start);
Других решений пока нет …