在我的项目中,函数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
?