我有一個獨立的應用程序,它創建了許多線程來執行與我們的服務器之間的各種事務。其中一個線程在給定的時間間隔內輪詢服務器。我已經把Thread.Sleep(user_supplied_time_interval)
用於讓輪詢線程在下一次輪詢嘗試之前等待給定的時間間隔。現在在結束申請期間,我想要Abort()
所有的線程。爲此,我繼續參考parentThread
中的輪詢線程,並在parentThread
中調用pollerThread.Abort(); pollerThread.Join();
。不過,我已經知道,我不能放棄睡眠線程。所以我得到System.Threading.ThreadAbortException
在線Thread.Sleep(user_supplied_time_interval)
。 我明顯可以設置一些布爾值來反映該輪詢器是否打算停止,並檢查布爾線程一旦線程退出睡眠狀態。但是,如果輪詢間隔很長,這也會延長應用程序退出,因爲輪詢器只有在退出睡眠狀態後纔會返回。在C中中止睡眠線程#
這個問題的標準解決方案是什麼?或者我應該分別抓住System.Threading.ThreadAbortException
並忽略它。
'Sleep'是邪惡的。 – Novak
使用'Timer'而不是'Sleep'。 –
@HamletHakobyan喜歡?請舉例。它不會消耗CPU週期嗎? – Mahesha999