在我的項目中,函數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?*/)
}
的問題是,應該updateClips
每500毫秒被調用,當goToPosition
函數被調用,執行被阻止,直到達到目標位置。在此等待期間,可能會發生需要停車的情況。因此,updateClip無論如何應該每隔500毫秒調用一次,如果它正在運行,它應該能夠停止執行goToPosition
。
我嘗試使用線程如下,但它沒有成功與我一起工作,我很難調試。我認爲可以用更簡單更清潔的方式來完成。
case ActMove:
std::thread t1(goToPosition, 0, 0, clipsActionArg);
t1.detach();
break;
我的問題是,我怎麼能檢查是否達到不阻塞執行,即目標位置,而無需使用while
?
您需要正確實現多線程應用程序或使其成爲事件驅動。兩者都不簡單。 – Slava
感謝Slava您的快速回答。我認爲可能有其他更簡單的方法。我會盡力去解決其中的一個問題。你建議哪一個?爲什麼? –