定期检查状况而不会阻塞

时间:2017-08-09 20:52:13

标签: c++ multithreading do-while

在我的项目中,函数clipsUpdate读取了一些由CLIPS设置的事实,而不受我的C ++代码的干扰。根据读取的事实,clipsUpdate调用所需的函数。

void updateClips(void)
{
     // read clipsAction

     switch(clipsAction)
     {
         case ActMove:
                 goToPosition (0, 0, clipsActionArg);
                 break;
     }
}

goToPosition功能中,会向车辆发送一条消息以移动到指定位置,然后使用while循环等待车辆到达该位置。

void goToPosition(float north, float east, float down)
{
     // Prepare and send the message

     do 
     {
          // Read new location information.
     }while(/*Specified position reached?*/)
}

问题是应该每隔500毫秒调用updateClips,并且当调用goToPosition函数时,执行将被阻止,直到达到目标位置。在此等待期间,可能会发生需要车辆停止的事情。因此,无论如何都应该每500毫秒调用一次updateClips,如果它正在运行,它应该能够停止执行goToPosition

我尝试使用如下的线程,但它并没有成功地与我合作,我很难调试。我认为可以用更简单,更清洁的方式来完成。

case ActMove:
      std::thread t1(goToPosition, 0, 0, clipsActionArg);
      t1.detach();
      break;

我的问题是,如何在不阻止执行的情况下检查目标位置是否到达,即不使用while

0 个答案:

没有答案