2011-09-20 64 views
1

我想在後臺啓動一個線程,並希望在一段時間後停止它,如果它沒有完成。主要問題是,在等待線程完成或定時器到達最後期限時,程序不應該阻塞。重要的是要保證這一點。中斷線程後的時間量,沒有阻塞而等待

我試過this example,但在等待timed_join時,它會阻塞。我必須宣佈正在進行一些計算的警告。

void CallbackReceived() { 
    boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(500); 
    boost::thread thrd(&Foo); 

    if (thrd.timed_join(timeout)) { 
    //finished 
    } else { 
    //Not finished; 
    } 
} 

您有什麼建議嗎?

+3

關閉我頭頂的'在等待完成之前宣佈警告','有另一個後臺線程負責監視第一個線程','更改第一個線程以便意識到時間限制並可以中止本身..' – forsvarir

+1

開始另一個線程,將調用'timed_join'。 –

+1

@forsvarir我會做出這個答案。 – RedX

回答

0

您可以啓動一個線程來啓動線程並等待timed_join。

main 
| 
|---thread 
|  | 
|  |-----thread 
|    | 
|    | 
|    | 
|  join<------  
| 
| 

但是,如果你只是想要一個警告,把它放在開始線程之前。如果它是一個圖形應用程序,並且您仍然想要處理事件,則必須使主線程可用,如上所示。

0

必須停止的線程可能會在一段時間後自行退出。例如,如果它執行循環中的所有工作,則它可以定期檢查(例如,每10次迭代循環)如果最大時間已經過去並且在時間已過的情況下退出。

不時地,主線程可以檢查完成作業的線程(或過早終止)並刪除它們。