MyThread)。TMyThread 繼承自 TThread,並建立 Unit2.cpp。Execute() 方法,撰寫執行緒主體程式碼。Resume() 啟動。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 中高效、安全地實現多線程應用,發揮多任務作業系統優勢。