程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ExitProcess與TerminateProcess函數

ExitProcess與TerminateProcess函數

編輯:C++入門知識

進程只是提供了一段地址空間和內核對象,其運行是通過在其地址空間內的主線程來體現的。當主線程的進入點函數返回時,進程也就隨之結束。這種進程的終止方式是進程的正常退出,進程中的所有線程資源都能夠得到正確的清除。除了這種進程的正常推出方式外,有時還需要在程序中通過代碼來強制結束本進程或其他進程的運行。ExitProcess()函數即可在進程中的某個線程中使用,並將立即終止本進程的運行。ExitProcess()函數原型為:   VOID ExitProcess(UINT uExitCode);   其參數uExitCode為進程設置了退出代碼。該函數具有強制性,在執行完畢後進程即已經被結束,因此位於其後的任何代碼將不能被執行。雖然ExitProcess()函數可以在結束進程的同時通知與其相關聯的動態鏈接庫,但是由於它的這種執行的強制性,使得ExitProcess()函數在使用上將存在有安全隱患。例如,如果在程序調用ExitProcess()函數之前曾用new操作符申請過一段內存,那麼將會由於ExitProcess()函數的強制性而無法通過delete操作符將其釋放,從而造成內存洩漏。有鑒於ExitProcess()函數的強制性和不安全性,在使用時一定要引起注意。   ExitProcess()只能強制執行本進程的退出,如果要在一個進程中強制結束其他的進程就要用TerminateProcess()來實現。與ExitProcess()不同,TerminateProcess()函數執行後,被終止的進程是不會得到任何關於程序退出的通知的。也就是說,被終止的進程是無法在結束運行前進行退出前的收尾工作的。所以,通常只有在其他任何方法都無法迫使進程退出時才會考慮使用TerminateProcess()去強制結束進程的。下面給出TerminateProcess()的函數原型:   BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode);   參數hProcess和uExitCode分別為進程句柄和退出代碼。如果被結束的是本進程,可以通過GetCurrentProcess()獲取到句柄。TerminateProcess()是異步執行的,在調用返回後並不能確定被終止進程是否已經真的退出,如果調用TerminateProcess()的進程對此細節關心,可以通過WaitForSingleObject()來等待進程的真正結束。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved