2012-08-17 42 views
0

我們有一個解碼函數,它可以在自己的線程中執行它的工作。 執行時間通常遠低於定義的超時值,但在某些情況下可能需要更長的時間才能完成。因此,爲了確保該功能不會對程序的其他部分造成額外的延遲,需要暫停。任何體面的方式來設置線程超時?

這是目前正在開發的Windows操作系統,但我也在尋找一種可移植的Linux解決方案。

執行到目前爲止解碼函數內的多個檢查,看它是否仍有時間繼續或中止處理。這是def。不是很好的練習,我正在改善這一點。

我知道boost提供了這樣的設施,但是我們並沒有在這個項目中使用boost。

+0

我認爲,如果您正在共享數據beteen線程和使用互斥鎖,那麼您當前的實現是明智的。它將使人們能夠防止死鎖。 – 2012-08-17 11:06:34

+0

你的問題到底是什麼?我已經讀了幾次你的問題,無法弄清楚你在問什麼。 – 2012-08-17 12:43:37

+0

@DavidSchwartz,編輯:)我想知道是否有任何好的方法來設置線程的超時,而不必在函數本身(線程)內編寫'時間檢查',這不是很好。 – fduff 2012-08-17 12:53:53

回答

3

這是Herb Sutter在這個問題上出色的article。結論是:你目前的做法是好的。只需讓您的解碼線程定期檢查它們是否耗盡時間。重要的是要平衡你檢查的頻率。

0

一種方法是在超時時設置一個標誌,以指示線程實例不報告任何完成,不繼續並儘快刪除/終止自己。儘可能降低優先級並忘掉它。立即創建另一個線程對象,覆蓋舊的實例值,並使用新的線程實例進行後續解碼。

最低優先級的孤線程最終會在自己檢查自殺標誌時終止。