我寫了一個簡單的作業隊列,它使用一個線程逐個運行隊列中的作業。線程本身來自池,所以只要作業隊列對象在其周圍,它的生命週期就會持續。作業從隊列中彈出,然後在作業上調用run(),並在完成後放棄。在線程上處理作業取消的最佳方法
我想知道什麼樣的範例可以用來在中途中止工作。天真的做法是定期檢查一箇中止標誌。問題是由於I/O阻塞或其他一些計算繁重的任務,一些工作需要一段時間。
我認爲的另一個選擇是完全殺死線程。這是一個潛在的骯髒和錯誤的解決方案。
還有其他的方法嗎?
編輯:由於我在C++土地,有沒有辦法注入異常到另一個線程?它會立即中斷執行並返回到主線程。我認爲這將是理想的。
如果你真的沒有看到使用「* flag」* - 類似上面提到的任何可能性,請查看'pthread_cancel()'。 – alk
或者只是使用標誌解決方案,或者運行一個可以殺死的單獨進程。殺死一個線程是一個糟糕的主意。請參閱http://www.drdobbs.com/parallel/interrupt-politely/207100682 –
@alk:AFAIK,使用'pthread_cancel()'也會導致線程本身退出。我試圖避免這一點。基本上,我想要一種方法來取消正在運行的作業,以便可以使用乾淨的作業隊列。一種方法是重新創建線程。 – MarkP