我在寫一個應用程序,它阻止來自兩個istreams
的輸入。殺死阻塞的Boost ::線程
從istream
讀取的是一個同步(阻塞)調用,所以我決定創建兩個Boost::thread
來完成讀取。
這些線程中的任何一個都可以到達「結束」(根據收到的某些輸入),一旦達到「結束」,兩個輸入流都會停止接收。不幸的是,我不知道哪個會這樣做。
因此,我不能在兩個線程上都使用join()
,因爲只有一個線程(不能預先確定哪一個)會實際返回(取消阻塞)。
我必須以某種方式迫使另一個退出,但它被阻止等待輸入,所以它不能自己決定是時候返回(條件變量或不是)。
是他們的一種方式之一:
- 發送信號,一個boost ::線程,或
- 力
istream
爲 「失敗」,或 - 殺死一升壓::主題?
注:
- 其中
istreams
的是cin
- 我試圖重新啓動的過程中,所以我不能關閉,禁止他們正在重置的方式輸入流。
編輯:
- 達到了「結束」時,我知道,我知道哪個線程已成功完成,並需要被殺害。我需要弄清楚它的殺戮(或者從一個istream中讀取不同的策略)。
- 我需要兩個線程退出並清理正確:(
謝謝!
幸運的是,我現在正在爲linux機器開發,但更喜歡便攜式版本。感謝你! – mmocny 2008-11-07 17:13:31
pthread_cancel()在類似的情況下沒有爲我設置它,甚至不把它的取消類型設置爲ASYNCHRONOUS。 – gatopeich 2011-03-21 12:24:19