1 程序終止的方法:
<1>主線程的進入點函式返回(最好使用這種方法)
<2>程序中的乙個執行緒呼叫exitprocesss函式(應該避免使用這樣的方法)。
<3>還有乙個程序中的執行緒呼叫terminateprocess函式(應該避免使用這樣的方法)。
<4>程序中的全部執行緒自行終止執行(這樣的情況差點兒從未發生)。
1.1 主線程進入點函式返回
始終都應該這樣來設計應用程式,即僅僅有當主線程的進入點函式返回時,它的程序才終止執行。這是保證全部執行緒資源可以得到正確清除的唯一辦法。
<1> c++物件將可以使用它們的析構函式得以釋放
<2> 作業系統可以正確的釋放該執行緒使用的堆疊記憶體
<3> 系統將程序的退出**設定為進入點函式的返回值
<4> 系統將核心物件的計數值減去1
1.2 呼叫exitprocess函式
voidexitprocess(uexitcode)
跟主線程的進入點函式返回相比,它就不那麼安全,不能保證資源被清理。
通過呼叫exitprocess函式,c++/c執行期啟動**可以確保主線程從它的進入點函式返回時,程序便終止執行,而無論程序中是否還有其它執行緒在執行。
假設在進入點函式中呼叫exitthread,那麼主線程就會停止執行,可是假設程序中假設還有其它執行緒的話,程序便不會終止。
exitprocess以及exitthread能保證作業系統資源在函式呼叫時被清除,可是不能保證c/c++執行時資源被正確的清除,所以不妨不要呼叫這些資源。
在前面也介紹過當主線程的進入點函式返回的時候,c/c++執行時會呼叫執行時的exit函式,exit函式會完畢以下操作
<1>呼叫_onexit函式的呼叫而註冊的人不論什麼函式
<2>為全部的全域性和靜態的c++物件呼叫析構函式
<3>呼叫系統的exitprocess函式,將nmainretval傳遞給它。使得作業系統可以撤銷程序並設定它的exit**。
1.3 呼叫terminateprocess 函式
bool terminateprocess(handle hprocess,uintnexitcode)
<1>全部開啟的控制代碼被關閉
<2>全部的執行緒會被終止
<3>程序物件的狀態變為終止的,滿足全部等待程序結束的執行緒
<4>程序中全部執行緒物件的狀態變為終止,滿足全部等待執行緒結束的執行緒
<5>程序的終止狀態由still_active變為了程序的返回**
這個函式是非同步的,它告訴作業系統,你要終止某個程序,可是當函式返回的時候,你無法保證程序是否已經被殺死,假設想要確切知道程序是否被殺死,能夠使用waitforsingleobject函式。
2 程序終止時的情況
<1>程序中全部剩餘執行緒將被終止
<2>程序中指定的使用者物件,gdi物件被釋放,核心物件被關閉
<3>核心物件的狀態程式設計收到通知的狀態
<4>程序的退出**由still_active 變為exitprocess或者terminateprocess傳遞的的退出**
<5>程序核心物件計數減去1
能夠通過函式 boolgetexitcodeprocess(handle handle,lpdword lpexitcode)來查詢程序的退出**,假設**是still_active表示的是程序還沒終止,假設不是這個,就說明程序已經被終止。
3 子程序
程式中要實現一段功能一共同擁有3種方法:
<1>呼叫函式
<2>開闢新執行緒
<3>開闢新程序
3.1 呼叫函式
呼叫函式時很常見的,可是它的缺點是由於在同乙個執行緒中,所以必須等待此函式執行完成,才幹執行後面的**
3.2 開闢新執行緒
這樣可以在新執行緒執行的時候,同一時候執行其它執行緒的**,可是這種缺點是不同執行緒之間須要交流資料時候,會產生同步的問題。
3.3 開闢子程序
這樣有點是既能夠保護資料,能夠同步執行,也能夠等待新程序執行完成再去執行其它程序的**。缺點是開闢新程序,會造成位址空間的浪費。
Windows核心之程序的終止和子程序
1 程序終止的方法 1 主線程的進入點函式返回 最好使用這種方法 2 程序中的乙個執行緒呼叫exitprocesss函式 應該避免使用這樣的方法 3 還有乙個程序中的執行緒呼叫terminateprocess函式 應該避免使用這樣的方法 4 程序中的全部執行緒自行終止執行 這樣的情況差點兒從未發生 ...
windows 核心程式設計 筆記之 程序
內容 windows程序 process 如上圖所示,windows任務管理器中的程序tab列中列出了系統管理的所有程序,我們經常利用任務管理器來結束某個沒有得到響應的應用程式,但是,作為乙個windows程式設計師,我們應該有這樣的疑問 程序是什麼東西?系統為什麼會存在程序?程序有哪些屬性?程序是...
程序的終止
系統呼叫exit 實現程序的終止。exit 在linux系統函式庫stdlib.h中的函式宣告如下 void exit int status exit 只有乙個引數status,稱作程序的退出狀態,父程序可以使用它的低8位。exit 的返回值通常用於指出程序所完成任務的成敗。如果成功,則返回0 如果...