0
我試圖實現一個程序,該程序運行受固定時間限制的函數。我設法用pthreads做,但我想使用Boost ::線程。到目前爲止,我編寫了以下內容:Boost :: thread瞬時中斷
#include <boost/thread.hpp>
#include <unistd.h>
#include <signal.h>
#include <iostream>
using namespace std;
boost::thread mythread;
void third_party(){
std::cout << "hello world" << std::endl;
}
void func(){
while (1){
third_party();
boost::this_thread::interruption_point();
}
}
void finish(int id){
mythread.interrupt();
}
int main(){
mythread = boost::thread(func);
signal(SIGALRM, finish);
alarm(2);
mythread.join();
return 0;
}
我設置一個報警的是2秒後熄滅,並呼籲finish
,這將中斷mythread
。問題是func
只會在到達中斷檢查點後停止。在實際情況下,我想使用這個,third_party
(我沒有接入的代碼)可能需要很長時間,我不想等到boost::this_thread::interruption_point()
。
我想知道我是否可以通過Boost::thread
或甚至更簡單的方式來完成上述任務。
需要注意的是,某些操作系統'boost :: thread'支持不支持這樣的即時中斷。對於那些做的,終止線程將不允許解開該線程的堆棧或允許該線程乾淨地銷燬它的數據。一個人可能應該使用'interruption_point',即使平臺由於這些原因提供了即時中斷。 – 2010-08-30 21:43:26