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

C++ Builder 多線程程式設計完整指南:TThread、同步與同步化物件

     編輯:關於C++

建立自訂執行緒類別

  1. IDE 選單 File → New → Thread Object,輸入類別名稱(如 MyThread)。
  2. IDE 自動產生 TMyThread 繼承自 TThread,並建立 Unit2.cpp。
  3. 覆寫 Execute() 方法,撰寫執行緒主體程式碼。
  4. 使用時動態建立實例,呼叫 Resume() 啟動。

VCL 物件的執行緒安全存取

VCL 不保證執行緒安全。必須透過 Synchronize() 方法將 UI 操作排入主執行緒佇列執行:

void __fastcall TMyThread::PushTheButton() {
    Button1->Click();
}
void __fastcall TMyThread::Execute() {
    // ...
    Synchronize((TThreadMethod)PushTheButton);
    // ...
}

少數 VCL 類別(TFont、TPen、TBrush 等)為執行緒安全,可直接存取以提升效能,但建議預設使用 Synchronize() 確保可靠性。

共享資料保護:臨界區

使用 TCriticalSection 保護共享變數:

class MyThread : public TThread {
private:
    TCriticalSection *pLockX;
    int x; float y;
};
void __fastcall MyThread::Execute() {
    pLockX->Acquire();
    x++; y = sin(x);
    pLockX->Release();
}

Acquire() 進入臨界區,Release() 離開,確保同一時間僅一執行緒存取受保護區塊。

執行緒同步化:事件物件

使用 TEvent 實現執行緒間協調:

  • 全域建立 TEvent 實例。
  • 完成特定操作的執行緒呼叫 SetEvent() 發送訊號。
  • 需等待的執行緒呼叫 WaitFor(INFINITE) 封鎖直到訊號觸發。
  • ResetEvent() 可清除訊號狀態。

亦可直接呼叫 Windows API(CreateEvent、WaitForSingleObject 等),C++ Builder 呼叫 API 極為方便。

總結

善用 TThread、Synchronize、TCriticalSection、TEvent 即可在 C++ Builder 中高效、安全地實現多線程應用,發揮多任務作業系統優勢。

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