我想運行一個函數,並告訴函數是否在n毫秒後沒有完成,停止該函數並啓動另一個函數。像這樣的代碼:如何停止從c + +外部運行功能
void run()
{
//do something that doesn't have while(1)
}
void main()
{
run();
if(runFunctionDidntFinishInSeconds(10)
{
endPrintFunction();
backupPlan();
}
return 0;
}
我搜索出來,發現boost :: timed_join函數。這是我的代碼:
void run()
{
int a;
for (int i = 0; i < 2000; i++)
cout << i << endl;
}
int main()
{
boost::thread t = new boost::thread(&run);
if (t.timed_join(boost::posix_time::microseconds(10000))){
cout << "done" << endl;
}
else{
cout << endl << "not done" << endl;
}
system("pause");
return 0;
}
但它不會停止線程't'運行。我去終止線程,但這不是一個好的選擇。 我想要'a'功能來完成我告訴它的確切時間。 系統每16ms獲得一次輸入,我想對其進行處理,並說如果處理花費的時間超過13ms左右,請執行備份計劃。我希望它能夠從編寫處理方法的人中抽象出來。因此,在它的頂部放一段時間循環會給我帶來延遲。 我該怎麼辦? 至少我認爲我需要的是能夠重置處理線程來完成它需要做的事情!
另一種選擇是讓循環依賴於全局變量('bool keep-running')而不是無限循環。全局通常是不好的做法,但在這樣的情況下,它們可能會導致比替代方案更乾淨的代碼。 – Carcigenicate
聽起來像你需要一個條件變量。保持運行的函數檢查變量,如果它是真的,則函數返回,否則它繼續運行。然後,只需要在線程結束時設置變量。 – NathanOliver
問題是我打電話的方法沒有一段時間(1),我無法像這樣在t中檢查變量,我希望它從打印方法中抽象出來。 – JOOF