C 「正在終止執行緒」的問題

2021-09-25 12:16:19 字數 853 閱讀 5025

在c#中啟用執行緒後,如果試圖使用abort方法來終止執行緒,那麼必定會丟擲「正在終止執行緒」的異常,一開始我也想過如何來避免這種異常出現,花了不少氣力,但最後發現全是徒勞。

原因是乙個正在執行的執行緒被終止在c#的機制中是屬於非正常結束,所以必定會爆出異常,所以我們也大可不必因為在**方面的「潔癖」非得找到乙個方法來阻止這種異常出現。

也有人提出採用join()方法來阻止,但很多情況下這並不能完全滿足我們的要求,比如我們有乙個後台的監聽執行緒,如果我們的確想終止它,如果我們採用了join方法,那麼我們不想發生的情況就會出現,我們的介面會因為執行了join而卡死在那裡,為什麼呢?因為我們的監聽執行緒一般來說都是乙個持續執行的執行緒,所以我們大可不必因為介意爆出異常而採用join的方法而導致程式假死。

我也在網上看見有人提出過,要終止執行緒最好是在執行執行緒的**中自然終止,這個說法本身沒有錯,但對於我上面說到的監聽執行緒,要自然結束是不可能辦到的。

從上面的分析我們可以看出,c#中的執行緒一旦開啟,那麼只有等這個執行緒執行完,自然結束,自然被系統**才不會爆出異常,任何一種外部的強制中斷都會被認為是異常的,任意乙個執行緒在本質上都和我們的主線程(main函式所在的執行緒)一樣,都必須按照順序執行完所有的語句方才結束當前執行緒,如果在所有的語句沒有執行完的時候就被終止了,這至少是與我們設計的理想狀態有差異的。

所以我覺得在遇到c#中的「正在終止執行緒」異常的時候,可以大膽的用try{}catch()來處理(丟棄異常資訊或將異常友好化),而不是阻止這個異常的出現,阻止這個異常的出現明顯有兩個壞處:

第一、耗費的代價實在太高

第二、對於執行緒的干涉手段過於複雜,不便於維護執行緒

我的解決方法是:

分類: c#.net

標籤: thread, abort, 終止, 執行緒

C 實現終止正在執行的執行緒

一般來說,很多人都會使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。基本思路是 定義乙個用於描述 停止 訊號的變數,在整個程式啟動前,設定該變數為false。程中,迴圈判斷...

終止正在執行的執行緒

很多人都說使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。下面我們來看具體的操作步驟。首先定義乙個 停止 訊號變數 view plaincopy to clipboardp...

執行緒終止的問題

有兩種情況可以使執行緒結束 控制函式結束或者根本就不允許執行緒完成,而提前終止它。我們可以想象在 word中進行後台列印,如果列印結束了,那執行緒就可以結束了。如果使用者中止了列印,那後台列印執行緒也要終止了。本文將主要介紹對這兩種情況的實現,並且介紹如何獲得執行緒的結束 對於工作執行緒,結束它是比...