std::async, возвращающее значение. Неизвестная ошибка

Я работаю с 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'

1 ответ

Решение

С выражением

std::async(timeNext(start));

ты на самом деле звонишь timeNext себя и передавая его возвращаемое значение (а bool) чтобы std::async,

Если вы видите, например, эту ссылку, вы увидите, что std::async Функция принимает функцию в качестве первого аргумента, а затем аргументы функции.

Так что вы должны сделать

std::async(&NuiSkeletonStream::timeNext, this, start);
Другие вопросы по тегам