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

多執行緒程式設計(一):概念入門與 Win32 API 基礎

     編輯:關於VC++

問題引入:單執行緒阻塞

void CSingleThreadDlg::OnSleepSixSecond() {
    Sleep(6000); // 6 秒內整個程式無回應 ("當機")
}

耗時操作阻塞 UI 訊息迴路,急需多執行緒解決。

核心概念

  • 進程:執行中的程式實例,擁有獨立虛擬位址空間、代碼、資料、系統資源
  • 執行緒:進程內執行單元,共享進程資源 (虛擬記憶體、全域變數、句柄等)
  • 每進程至少一主執行緒 (由系統自動建立,入口為 main/WinMain)
  • 使用者可建立額外執行緒,實現並發 (單 CPU 以時間片輪轉模擬並行)
  • 執行緒切換有開銷,過多活躍執行緒反而降低效能

Win32 API 關鍵函數

範例專案系列 (MultiThread1~4)

MultiThread1:基本建立與停止

  • 全域 volatile BOOL g_bRun 控制執行緒迴圈
  • 執行緒函數每秒更新對話框時間顯示
  • 「啟動」按鈕呼叫 CreateThread,「停止」按鈕設 g_bRun=FALSE

MultiThread2:傳遞整數參數與等待結束

  • CreateThread 參數傳遞 (VOID*)integer
  • 主執行緒呼叫 WaitForSingleObject(hThread, INFINITE) 等待結束
  • 注意:等待期間主執行緒阻塞,UI 無回應

MultiThread3:傳遞結構體指標 (含進度條)

  • 定義 ThreadInfo 含間隔時間與進度條指標
  • 執行緒更新進度條
  • 死鎖教訓:若主執行緒 WaitForSingleObject 等待執行緒,而執行緒需主執行緒處理繪圖訊息 → 雙向等待死鎖
  • 解決:主執行緒不要等待,改用非阻塞方式

MultiThread4:測試系統最大執行緒數

  • 迴圈不斷 CreateThread 直到失敗
  • 每執行緒 Sleep(3000) 保持存活
  • 最後 Sleep(5000) 等待所有結束

關鍵程式碼片段

// 建立執行緒 (同步方式)
HANDLE hThread = CreateThread(
    NULL, 0, 
    (LPTHREAD_START_ROUTINE)ThreadFunc, 
    NULL, 0, &ThreadID);

// 等待執行緒結束 (INFINITE 無限等待)
WaitForSingleObject(hThread, INFINITE);

// 執行緒函數原型
DWORD WINAPI ThreadFunc(LPVOID lpParam) { ... }

下一篇預告

將介紹 MFC 封裝的 AfxBeginThread、CWinThread 類別,以及工作者/UI 執行緒的實作模式,簡化多執行緒開發複雜度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數用途
CreateThread建立執行緒,回傳句柄
SuspendThread/ResumeThread暫停/恢復執行緒
ExitThread執行緒自行結束
TerminateThread強制終止 (不推薦,資源洩漏風險)
PostThreadMessage向執行緒佇列張貼訊息
WaitForSingleObject等待執行緒/同步物件訊號