有兩種情況可以使執行緒結束:控制函式結束或者根本就不允許執行緒完成,而提前終止它。我們可以想象在
word中進行後台列印,如果列印結束了,那執行緒就可以結束了。如果使用者中止了列印,那後台列印執行緒也要終止了。本文將主要介紹對這兩種情況的實現,並且介紹如何獲得執行緒的結束**。
對於工作執行緒,結束它是比較容易的:退出執行緒函式然後返回乙個結束原因的**就是了。使用者可以使用afxendthread函式或直接利用
return返回。通常0代表成功返回,這不是硬性規定,一切要取決於你了。對於使用者介面執行緒,呼叫::postquitmessage,它所要的唯一的引數就是返回**,也就是工作執行緒中的那個碼,性質是一樣的。0通常代表成功。
如果需要獲得執行緒返回**,只需要呼叫::getexitcodethread就可以了。這個函式的具體作用就看大家具體去查幫助了。它傳入的是執行緒的控制代碼,和乙個提向返回**的指標。將來就從那個指標得到返回**。如果執行緒仍然處於活動狀態,那麼::getexitcodethread得到的返回**為still_active,如果已經退出則得到的是返回**的位址。獲得cwinthread物件的返回**還需要一點麻煩,通常,當cwinthread執行緒結束時,執行緒物件就刪除了,因為這個物件不存在了,也就沒有辦法訪問物件的m_hthread變數了,為了避免這種情況,可以有兩種方法:
將m_bautodelete設定為false,這使得執行緒結束後cwinthread物件仍然存在,這樣使用者就可以訪問m_hthread了,但是如果使用者使用這種方法,使用者需要自己析構cwinthread物件。這種方法是推薦的方法。
C 「正在終止執行緒」的問題
在c 中啟用執行緒後,如果試圖使用abort方法來終止執行緒,那麼必定會丟擲 正在終止執行緒 的異常,一開始我也想過如何來避免這種異常出現,花了不少氣力,但最後發現全是徒勞。原因是乙個正在執行的執行緒被終止在c 的機制中是屬於非正常結束,所以必定會爆出異常,所以我們也大可不必因為在 方面的 潔癖 非...
執行緒的終止
1.程序中的任意執行緒呼叫了exit exit 或者 exit,那麼整個程序就會終止。2.如果預設的動作是終止程序,那麼傳送到執行緒的訊號也會終止整個程序。在不終止程序的情況下停止單個執行緒 1.執行緒可以從啟動例程中返回 return 返回值是執行緒的退出碼。2.執行緒可以被同一程序中的其他執行緒...
執行緒 終止執行緒執行
stop 方法 缺點 強制終止會丟資料 不建議使用 public class myfile catch interruptedexception e 5秒後終止執行緒 t.stop 已過時,強制終止會丟資料 class myrunnable implements runnable catch int...