Windows 95 採用預先多任務架構,每個應用程式即一個進程,進程可建立多個執行緒並發執行。執行緒是系統排程的基本單位,以函數形式存在,共享進程的全域變數、檔案控制表等資源。主執行緒類似 Unix 父進程,子執行緒類似子進程。為了讓使用者能有效控制(暫停、終止、改變條件)獨立運行的執行緒,必須引入同步機制——Event 物件是核心選擇之一。
HANDLE hThread = CreateThread(
NULL, // 安全屬性(Win95 忽略)
0, // 預設堆疊大小
&TEventWindow::ThreadFunc, // 執行緒入口函數
this, // 傳遞 this 指標
0, // 立即運行
&hThreadId // 接收執行緒 ID
);
入口函數簽名:DWORD WINAPI ThreadFunc(LPVOID lpParam)。參數 lpParam 傳遞 this,內部轉型後呼叫具體業務函數 LoopFunc()。
CreateEvent:建立手動/自動重置、初始狀態、具名/匿名 Event。SetEvent / ResetEvent:觸發/重置信號狀態。WaitForSingleObject / WaitForMultipleObjects:阻塞等待信號。| 模式 | Event 類型 | 適用場景 |
|---|---|---|
| 單次觸發通知 | 自動重置 | 工作完成通知主執行緒 |
| 廣播通知 | 手動重置 | 多執行緒等待同一啟動信號 |
| 互斥存取 | 配合 CriticalSection | 保護共享資源 |
不同應用程式間同步,只需在 CreateEvent 指定相同名稱:
HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, "Global\\MyAppSyncEvent");
// 進程 A:SetEvent(hEvent);
// 進程 B:WaitForSingleObject(hEvent, INFINITE);
前綴 Global\\ 確保跨會話可見(Terminal Services 環境下關鍵)。
HANDLE hEvent 與 HANDLE hThread。CreateThread + CreateEvent。WaitForSingleObject(hStopEvent, 0) 實現優雅退出。SetEvent(hStopEvent) → WaitForSingleObject(hThread, INFINITE) 回收。CloseHandle(hEvent) 避免洩漏。WaitForSingleObject(INFINITE) 導致介面凍結;改用 MsgWaitForMultipleObjects 配合訊息泵。
掌握 Event 物件,即掌握了 Win32 多執行緒協作的核心鑰匙。