亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

解析C/C++中如何終止線程的運行

2020-01-26 16:02:30
字體:
來源:轉載
供稿:網友

想要終止線程的運行,可以使用以下方法:
1、線程函數返回(最好使用該方法)。
2、通過調用ExitThread函數,線程將自行撤消(最好不使用該方法)。
3、同一個進程或另一個進程中的線程調用TerminateThread函數(應避免使用該方法)。
4、ExitProcess和TerminateProcess函數也可以用來終止線程的運行(應避免使用該方法)。

下面將詳細介紹終止線程運行的方法:1-4,并說明線程終止運行時會出現何種情況:5。

1、線程函數返回
始終都應該將線程設計成這樣的形式,即當想要線程終止運行時,它們就能夠返回。這是確保所有線程資源被正確地清除的唯一辦法。
如果線程能夠返回,就可以確保下列事項的實現:
(1)在線程函數中創建的所有C++對象均將通過它們的撤消函數正確地撤消。
(2)操作系統將正確地釋放線程堆棧使用的內存。
(3)系統將線程的退出代碼(在線程的內核對象中維護)設置為線程函數的返回值。
(4)系統將遞減線程內核對象的使用計數。

2、ExitThread函數
可以讓線程調用ExitThread函數,以便強制線程終止運行:
函數原型:
VOID ExitThread(DWORD dwExitCode);
該函數將終止線程的運行,并導致操作系統清除該線程使用的所有操作系統資源。但是,C++資源(如C++類對象)將不被撤消。由于這個原因,最好從線程函數返回,而不是通過調用ExitThread來返回。
當然,可以使用ExitThread的dwExitThread參數告訴系統將線程的退出代碼設置為什么。ExitThread函數并不返回任何值,因為線程已經終止運行,不能執行更多的代碼。
注意終止線程運行的最佳方法是讓它的線程函數返回。但是,如果使用本節介紹的方法,應該知道ExitThread函數是Windows用來撤消線程的函數。如果編寫C/C++代碼,那么決不應該調用ExitThread。應該使用Visual C++運行期庫函數_endthreadex。如果不使用Microsoft的Visual C++編譯器,你的編譯器供應商有它自己的ExitThread的替代函數。不管這個替代函數是什么,都必須使用。

3、TerminateThread函數
調用TerminateThread函數也能夠終止線程的運行:
函數原型:

復制代碼 代碼如下:

BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode);
 
與ExitThread不同,ExitThread總是撤消調用的線程,而TerminateThread能夠撤消任何線程。hThread參數用于標識被終止運行的線程的句柄。當線程終止運行時,它的退出代碼成為你作為dwExitCode參數傳遞的值。同時,線程的內核對象的使用計數也被遞減。
注意TerminateThread函數是異步運行的函數,也就是說,它告訴系統你想要線程終止運行,但是,當函數返回時,不能保證線程被撤消。如果需要確切地知道該線程已經終止運行,必須調用WaitForSingleObject或者類似的函數,傳遞線程的句柄。
設計良好的應用程序從來不使用這個函數,因為被終止運行的線程收不到它被撤消的通知。線程不能正確地清除,并且不能防止自己被撤消。
注意當使用返回或調用ExitThread的方法撤消線程時,該線程的內存堆棧也被撤消。但是,如果使用TerminateThread,那么在擁有線程的進程終止運行之前,系統不撤消該線程的堆棧。Microsoft故意用這種方法來實現TerminateThread。如果其他仍然正在執行的線程要引用強制撤消的線程堆棧上的值,那么其他的線程就會出現訪問違規的問題。如果將已經撤消的線程的堆棧留在內存中,那么其他線程就可以繼續很好地運行。
此外,當線程終止運行時, DLL通常接收通知。如果使用TerminateThread 強迫線程終止,DLL就不接收通知,這能阻止適當的清除。

4、在進程終止運行時撤消線程
ExitProcess和TerminateProcess函數也可以用來終止線程的運行。差別在于這些線程將會使終止運行的進程中的所有線程全部終止運行。另外,由于整個進程已經被關閉,進程使用的所有資源肯定已被清除。這當然包括所有線程的堆棧。這兩個函數會導致進程中的剩余線程被強制撤消,就像從每個剩余的線程調用TerminateThread一樣。顯然,這意味著正確的應用程序清除沒有發生,即C++對象撤消函數沒有被調用,數據沒有轉至磁盤等等。

5、線程終止運行時發生的操作
當線程終止運行時,會發生下列操作:
(1)線程擁有的所有用戶對象均被釋放。在Windows中,大多數對象是由包含創建這些對象的線程的進程擁有的。但是一個線程擁有兩個用戶對象,即窗口和掛鉤。當線程終止運行時,系統會自動撤消任何窗口,并且卸載線程創建的或安裝的任何掛鉤。其他對象只有在擁有線程的進程終止運行時才被撤消。
(2)線程的退出代碼從STILL_ACTIVE改為傳遞給ExitThread或TerminateThread的代碼。
(3)線程內核對象的狀態變為已通知。
(4)如果線程是進程中最后一個活動線程,系統也將進程視為已經終止運行。
(5)線程內核對象的使用計數遞減1。
當一個線程終止運行時,在與它相關聯的線程內核對象的所有未結束的引用關閉之前,該內核對象不會自動被釋放。
一旦線程不再運行,系統中就沒有別的線程能夠處理該線程的句柄。然而別的線程可以調用GetExitcodeThread來檢查由hThread標識的線程是否已經終止運行。如果它已經終止運行,則確定它的退出代碼:
函數原型:

復制代碼 代碼如下:

BOOL GetExitCodeThread(
HANDLE hThread,
PDWORD pdwExitCode);

退出代碼的值在pdwExitCode指向的DWORD中返回。如果調用GetExitCodeThread時線程尚未終止運行,該函數就用STILL_ACTIVE標識符(定義為0x103)填入DWORD。如果該函數運行成功,便返回TRUE。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲最大av网| 成人h片在线播放免费网站| 日韩av一区二区在线观看| 懂色av一区二区三区| 国产美女被下药99| 欧美日本黄视频| 亚洲色图狂野欧美| 国产一区二区三区视频在线观看| 亚洲精品videossex少妇| 国产在线拍揄自揄视频不卡99| 日韩一区二区欧美| 九九热这里只有精品免费看| 色悠久久久久综合先锋影音下载| 57pao国产成人免费| 欧美另类老女人| 亚洲国产精品大全| 热久久99这里有精品| 95av在线视频| 久久久av电影| 亚洲精品色婷婷福利天堂| 欧美综合激情网| 久久偷看各类女兵18女厕嘘嘘| 中文字幕亚洲第一| 夜夜狂射影院欧美极品| 亚洲一区二区中文| 欧美日韩在线看| 亚洲精品久久久久久久久久久久久| 色偷偷综合社区| 亚洲一区二区久久| 午夜精品国产精品大乳美女| 亚洲国产婷婷香蕉久久久久久| 精品美女久久久久久免费| 久久综合色88| 久久精品中文字幕| 中文字幕日韩精品在线| 欧美黄色片在线观看| 亚洲男人天堂网| 一本色道久久88精品综合| 国产色婷婷国产综合在线理论片a| 亚洲一区二区三区香蕉| 日韩成人网免费视频| 在线视频欧美性高潮| 国产精品综合不卡av| 成人中文字幕在线观看| 日韩av大片在线| 影音先锋欧美精品| 国产精品一区二区三区在线播放| 日韩女优人人人人射在线视频| 中文字幕精品一区久久久久| 国产主播欧美精品| 国产精品高潮粉嫩av| 精品国产乱码久久久久久虫虫漫画| 日韩美女av在线免费观看| 国产精品一区二区久久久久| 91视频-88av| 午夜精品久久久久久久男人的天堂| 久久久免费观看| 青青a在线精品免费观看| 日韩在线播放av| 97视频在线观看视频免费视频| 免费不卡在线观看av| 成人动漫网站在线观看| 日韩网站在线观看| 成人精品视频在线| 欧美成人sm免费视频| 欧美最顶级丰满的aⅴ艳星| 欧美亚洲成人xxx| 亚洲免费成人av电影| 午夜美女久久久久爽久久| 国产精品久久国产精品99gif| 久久天天躁狠狠躁老女人| 在线观看91久久久久久| 九九热这里只有在线精品视| 97国产在线视频| 亚洲区bt下载| 亚洲精品成人久久久| 亚洲免费av电影| 亚洲aⅴ日韩av电影在线观看| 国产精品久久久久高潮| 亚洲在线免费观看| 97精品在线观看| 中文字幕久热精品在线视频| 国产综合色香蕉精品| 欧美猛男性生活免费| 麻豆国产va免费精品高清在线| 成人网在线视频| 国产91精品久久久久| 久久综合九色九九| 亚洲国产精品人人爽夜夜爽| 国自产精品手机在线观看视频| 亚洲欧美国产一本综合首页| 日本精品在线视频| 欧洲亚洲女同hd| 2019日本中文字幕| 国产精品香蕉在线观看| 久久亚洲国产成人| 国产精品成人播放| 欧美性xxxxxxx| 成人有码在线播放| 伊人成人开心激情综合网| 亚洲人成欧美中文字幕| 中文字幕精品国产| 永久555www成人免费| 成人黄色免费片| 久久久精品一区二区| 欧美成人在线免费| 亚洲成人网久久久| 国产一区二区三区免费视频| 91久久嫩草影院一区二区| 成人午夜在线视频一区| 亚洲国产欧美一区| 亚洲第一福利在线观看| 国产欧亚日韩视频| 国产精品一区二区在线| 欧美精品日韩三级| 国产精品jizz在线观看麻豆| 亚洲精品国产欧美| 久久国产精品久久久久久久久久| 亚洲有声小说3d| 精品久久久久久久中文字幕| 久久久99久久精品女同性| 国产美女久久精品| 狠狠色狠狠色综合日日五| 色99之美女主播在线视频| 美女性感视频久久久| 亚洲欧美日韩一区二区三区在线| 精品国产一区二区三区四区在线观看| 国内精品免费午夜毛片| 国产精品夫妻激情| 久久精品电影网| 欧美成在线视频| 久久亚洲精品毛片| 日韩高清免费在线| www.日韩欧美| 亚州欧美日韩中文视频| 欧美日韩福利电影| 91免费的视频在线播放| 欧美一区二区.| 亚洲精品电影在线观看| 91精品国产综合久久香蕉最新版| 日韩久久精品成人| 国产精品久久久999| 九九热精品视频在线播放| 日韩精品中文字幕久久臀| 精品亚洲永久免费精品| 成人激情视频在线播放| 日韩中文有码在线视频| 在线视频欧美性高潮| 欧美在线日韩在线| 亚洲自拍偷拍福利| 亚洲欧美日韩在线一区| 国产精品偷伦免费视频观看的| 欧美肥臀大乳一区二区免费视频| 日韩在线播放视频| 久久在线免费观看视频| 一区二区三区视频免费在线观看| 久久91亚洲精品中文字幕奶水| 成人乱人伦精品视频在线观看| 日韩暖暖在线视频| 亚洲激情视频网站| 国产精品在线看| 日韩在线观看免费av| 国精产品一区一区三区有限在线| 日韩在线观看免费高清|