VC程序的建立、終止
眾所周知,當用戶在Windows作業系統中單擊一個可執行檔案時,系統就相當於產生了一個新程序。那麼如何在一個程式產生一個新程序呢?Windows給廣大程式設計師提供了很多的方法,一般來說,只需要呼叫一個API函式就可以實現程序的建立。下面將會介紹使用CreateProcess函式建立程序和使用ExitProcess函式及TerminateProcess函式終止程序的方法。
CreateProcess函式用來建立一個新的程序和它的主執行緒,這個新程序執行指定的可執行檔案。當一個執行緒呼叫CreateProcess時,系統就會建立一個程序核心物件,其初始使用計數是1。該程序核心物件不是程序本身,而是作業系統管理程序時使用的一個較小的資料結構,可以將程序核心物件視為由程序的統計資訊組成的一個較小的資料結構。然後,系統為新程序建立一個虛擬地址空間,並將可執行檔案或任何必要的DLL檔案的程式碼和資料載入到該程序的地址空間中。
然後,系統為新程序的主執行緒建立一個執行緒核心物件。與程序核心物件一樣,執行緒核心物件也是作業系統用來管理執行緒的小型資料結構。
如果系統成功地建立了新程序和主執行緒,CreateProcess便返回為TRUE。
BOOL CreateProcess(
LPCTSTRlpApplicationName, //可執行模組的名字
LPTSTRlpCommandLine, //指定要執行的命令列
LPSECURITY_ATTRIBUTESlpProcessAttribute, //程序物件的安全性說明
LPSECURITY_ATTRIBUTESlpThreadAttribute, //執行緒物件的安全性說明
BOOLbInheritHandles, //是否從呼叫程序處繼承了控制代碼
DWORD dwCreationFlags, //指定附加的、用來控制優先類和程序的建立的標誌
LPVOIDlpEnvironment, //指向一個新程序的環境塊
LPCTSTRlpCurrentDirectory, //子程序的工作路徑
LPSTARTUPINFOlpStartupInfo, //決定新程序的主窗體外觀
LPPROCESS_INFOMATIONlpProcessInformation //獲取新程序的返回資訊
);
ExitProcess函式,當程序中的一個執行緒呼叫ExitProcess函式時,程序便終止執行。該函式的原型如下:
Void ExitProcess (UINT fuExitCode);
該函式用於終止進行的執行,並將程序的退出程式碼設定為fuExitCode。ExitProcess函式並不返回任何值,因為程序已經終止運行了。如果在呼叫ExitProcess之後又增加了程式碼,那麼該程式碼是不會被執行的。
TerminateProcess函式
在一個程序中呼叫TerminateProcess函式也能夠終止程序的執行。TeeminateProcess函式的原型如下:
BOOL TerminateProcess(
HANDLE hProcess,
UINT fuExitCode );
TerminateProcess函式和ExitProcess函式的一個很大的區別在於,任何執行緒都可以呼叫TerminateProcess函式來終止另一個程序或它自己的程序的執行,而ExitProcess函式只能被執行緒用來自己結束自己宿主程序的執行,不能結束其他程序的執行。