2010-08-30 95 views
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或甚至更簡單的方式來完成上述任務。

回答

2

Boost沒有提供立即執行中斷的方法,但它們確實提供了獲取本地線程句柄的方法,因此如果您的本機線程庫支持即時中斷,那麼您仍然可以使用該方法。

查看boost :: thread :: native_handle()來訪問本地句柄。

創建自己的線程類可能是一個好主意,它提供了您需要從boost :: thread類派生的擴展功能。

+5

需要注意的是,某些操作系統'boost :: thread'支持不支持這樣的即時中斷。對於那些做的,終止線程將不允許解開該線程的堆棧或允許該線程乾淨地銷燬它的數據。一個人可能應該使用'interruption_point',即使平臺由於這些原因提供了即時中斷。 – 2010-08-30 21:43:26

相關問題