C C 中退出執行緒的四種解決方法

2022-10-04 05:06:10 字數 1035 閱讀 9943

退出執行緒可以有四種方法:

1.執行緒函式的return返回(最好這樣):

其中用執行緒函式的return返回, 而終止執行緒是最安全的, **程函式return返回後, 會清理函式內申請的類物件, 即呼叫這些物件的析構函式. 然後會自動呼叫 _endthreadex()函式來清理 _beginthreadex(...)函式申請的資源(主要是建立的tiddata物件).

2.呼叫 _endthreadex()函式 或 exitthread()函式(最好不要):

如果使用這兩種方法退程式設計客棧出線程, 則不會執行執行緒函式的return語句, 所以就不會呼叫執行緒函式作用域內申請的類物件的析構函式, 會造成記憶體洩露.

剩下兩種是在程式設計中一定要避免的.

3.用同乙個程序中的另乙個線www.cppcns.com程呼叫 terminatethread()函式(必須避免);

4.終止該執行緒所在的程序(絕對避免);

但是要說_endthreadex完全沒有用肯定是不對的,_endthreadex並不是乙個過時的函式,正確的使用並不會帶來問題。

比如**程的主函式中,return是_endthreadex的乙個良好替代,就像main函式裡面return是exit()或exitproccess()的良好替代一樣,但是這不表示exit函式沒用。比如執行緒呼叫了乙個子函式,如果子函式決定退出執行緒,return是沒用的,_endthreadex即可終結執行緒。

但是這個設計不好,因為可能造成lz提出的資源洩漏。尤其考慮到後台執行緒終結後的資源洩漏比主線程的資源洩漏更要命(主線程退出後,程序就退出了,os會清理一切資源,無所謂洩露不洩露,而子執行緒退出後主執行緒可能還會執行很久,並且可能有大量的同型別的子執行緒退出,會造成要命的洩露)

良好的設計還是返回執行緒的主函式,讓threadproc來決定是不是要退出,從這個意義上說,_endthreadex沒有必要。微軟也指出程式設計客棧,有些程式設計師就是要呼叫exit系列函式(exitthread,exitproccess等),沒轍,只好提供了。

本文標題: c/c++中退出執行緒的四種解決方法

本文位址: /ruanjian/c/95762.html

C C 四種退出執行緒的方法

c c 四種退出執行緒的方法 退出執行緒可以有四種方法 1.執行緒函式的return返回 最好這樣 2.呼叫 endthreadex 函式 或 exitthread 函式 最好不要 如果使用這兩種方法退出執行緒,則不會執行執行緒函式的return語句,所以就不會呼叫執行緒函式作用域內申請的類物件的析...

雜湊衝突及四種解決方法

通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的值。這時候就產生了雜湊衝突。就是根據key即經過乙個函式f key 得到的結果的作為位址去存放當前的key value鍵值對 這個是hashmap的存值方式 但是卻發現算出來的位址上已經有人先來了。就...

雜湊衝突及四種解決方法

雜湊是通過對資料進行再壓縮,提高效率的一種解決方法。但由於通過雜湊函式產生的雜湊值是有限的,而資料可能比較多,導致經過雜湊函式處理後仍然有不同的資料對應相同的值。這時候就產生了雜湊衝突。裝填因子 裝填因子 資料總數 雜湊表長 雜湊函式 處理衝突的方法 1.開放位址方法 1 線性探測 按順序決定值時,...