父執行緒結束時如何自動結束子執行緒

2021-04-15 00:55:02 字數 951 閱讀 6331

首先要指出這裡的父執行緒不是主線程 這的確是個問題,也就是說怎麼才能保證父執行緒結束後其子執行緒也都退出.有人說在父執行緒結束前結束掉子執行緒不就行了嗎?但事實是,如何父執行緒被暴力時,根本無法正確處理子執行緒.個人認為有兩種方法.

一是在父執行緒中得到控制代碼,建立子執行緒時作為引數傳給子執行緒,這樣子執行緒通過這個控制代碼可以知道父執行緒是否仍存活,如何已結束,則結束自身.

父執行緒中:

handle hparent=invalid_handle_value;

if (!duplicatehandle (getcurrentprocess (),getcurrentthread (),getcurrentprocess (),&hparent,null,true,duplicate_same_access))

printf ("get parent handle failed!/n");

createthread (&sa,0,thread_fun2,(lpvoid)hparent,null,null);

子執行緒中:

handle hparent=(handle)lpparam;

dword ncode;

doif (ncode!=still_active)//父執行緒結束

return 1;

....

}while (....);

注意duplicatehandle的引數,開始我圖省事將最後乙個引數也設為null,結果在子執行緒中呼叫getexitcodethread時會出錯,通過錯誤**知道是"拒絕訪問",也即沒有足夠許可權,因此在得到父執行緒實控制代碼時一定要指定訪問許可權.

第一種其實有點應付的味道,效能不好,而且並不能算是完成了要求,當然以實時性要求不高時也可以.另一種方法是通過乙個全域性陣列,或者乙個建立父執行緒時作為引數傳入的陣列儲存所有建立的子執行緒控制代碼.這樣當要結束父執行緒時,就可以根據這個陣列將所有記錄的子執行緒結束.有點浪費空間,不過效能肯定比第一種好,而且實時性也要好得多.  

主線程會等待子執行緒執行結束再結束

一 執行緒的特點 主程序會等待所有子程序執行結束後再結束。1 將子執行緒設定守護主線程 子執行緒物件 threading.thread target 任務,daemon true 子執行緒物件.setdaemon true 二 示例 要求 主線程睡一秒後退出程式 1 不設定守護主線程則報錯,因為任務...

C 主線程等待子執行緒執行結束

佐左佑右 原文 c 主線程等待子執行緒執行結束 由於主程式中呼叫matlab的dll檔案進行計算要用較長的時間,主介面會有很長時間的卡頓,造成的使用者感受十分不好,因此我想在呼叫時,將呼叫放入子執行緒中,然後在主線程中彈出乙個提示框,顯示資料正在載入,等子執行緒執行結束後,主線程繼續工作。使用的是中...

python主線程與子執行緒的結束順序

對於程式來說,如果主程序在子程序還未結束時就已經退出,那麼linux核心會將子程序的父程序id改為1 也就是init程序 當子程序結束後會由init程序來 該子程序。主線程退出後子執行緒的狀態依賴於它所在的程序,如果程序沒有退出的話子執行緒依然正常運轉。如果程序退出了,那麼它所有的執行緒都會退出,所...