Windows核心之程序的終止和子程序

2021-09-07 16:53:37 字數 2047 閱讀 3416

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 如果...