2013-09-26 51 views
0

我正在使用C++中的windows Kinect。 我试图检查右手是否从右侧走到左肩,就像擦拭动作一样。 我试图与std :: async一起工作,因为我需要方法的返回值。 我已经使用了我得到的错误,不知道最新的事情。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' 
+0

奖励:你的std ::使用异步是不是真的异步。基本上你需要抓住回归的未来并保持活力。看看http://en.cppreference.com/w/cpp/thread/async上的例子 – sbabbi

回答

2

随着表达

std::async(timeNext(start)); 

你居然电话timeNext自己,通过其返回值(a bool)至std::async

如果您看到例如this reference您将看到std::async函数将函数作为第一个参数,然后将函数的参数传递给函数。

所以,你应该做的

std::async(&NuiSkeletonStream::timeNext, this, start); 
+0

我编辑了代码,但是如果我写 std :: async(timeNext,start); 参数列表不匹配,我得到一个新的错误。 智能感知:(布尔(clock_t表示开始),用clock_t) – Spirit

+0

@Spirit难道只有一个* *智能感知错误或正确的:没有重载函数“的std ::异步”实例参数列表 参数类型相匹配*编译*错误? –

+0

我还有11个REAL错误,所以我猜这不仅仅是intellisense。 错误表示此方法的参数太少或太多。然后有这个错误: '错误错误C3867:'NuiSkeletonStream :: timeNext':函数调用缺少参数列表;使用'&NuiSkeletonStream :: timeNext'来创建一个指向成员的指针' 但是,如果我添加了'&',我刚刚得到另一个编译错误,名为'错误错误C2276:'&':绑定成员函数表达式' – Spirit