首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MFC 程式設計:深入理解 Win32 行程與執行緒

     編輯:關於C語言

核心概念:行程與執行緒的區別

在 Windows 程式設計中,「行程」與「執行緒」是兩個基礎且關鍵的概念。簡單來說,行程 是一個正在執行的程式實例,擁有獨立的虛擬位址空間、程式碼、資料及系統資源(如檔案控制代碼、同步物件等)。一個應用程式可包含一或多個行程。

執行緒 則是作業系統排程 CPU 時間的基本單位。一個行程至少擁有一條執行緒(主執行緒),並可建立多條執行緒。同一行程內的所有執行緒共享該行程的虛擬位址空間、全域變數及系統資源,這使得執行緒間的通訊比行程間通訊更簡單、更高效。

為何需要執行緒?

引入執行緒機制主要基於效率考量:

  • 建立速度快: 建立新行程需載入程式碼映像,而執行緒共享既有程式碼空間,建立與啟動成本極低。
  • 通訊便捷: 共享記憶體空間讓資料交換無需複雜的行程間通訊(IPC)機制。
  • 資源開銷小: 執行緒切換上下文比行程切換輕量得多。

MFC 中的行程處理:直接呼叫 Win32 API

MFC 未封裝行程管理類別,因此需直接使用 CreateProcess API。其原型參數眾多,關鍵參數解析如下:

  • lpApplicationName / lpCommandLine:指定執行模組與命令列參數。
  • lpProcessAttributes / lpThreadAttributes:安全性屬性(主要用於 NT 核心系統)。
  • bInheritHandles:子行程是否繼承父行程控制代碼(如互斥體、事件、檔案控制代碼等)。
  • dwCreationFlags:建立旗標,控制優先權類別、除錯模式、主控台行程等行為。
  • lpStartupInfo:指定主視窗顯示狀態、標準輸入輸出控制代碼等啟動資訊。
  • lpProcessInformation:輸出參數,接收新行程與主執行緒的控制代碼及 ID。

實務建議

使用 CreateProcess 時,務必正確初始化 STARTUPINFO 結構的 cb 欄位,並妥善處理繼承控制代碼的安全性。若需啟動文件而非執行檔,可搭配 ShellExecute 或 ShellExecuteEx 使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved