![](/img/trans.png)
[英]How to display the time in a jpanel while a background thread is running?
[英]How to sync Delphi event while running DB operations in a background thread?
使用 Delphi 7 和 UIB,我在后台線程中運行數據庫操作以消除以下問題:
我在這里閱讀了所有相關主題,並意識到:使用while isMyThreadStillRuning and not UserCanceled do sleep(100); end;
while isMyThreadStillRuning and not UserCanceled do sleep(100); end;
不是推薦的方法,而是使用TEvent.WaitFor(3000)...
。
這里的解決方案要么是發送信號 FROM 或TO...線程,要么是使用 messages ,但絕不是兩種方式。
閱讀幫助文件,我還發現TSimpleEvent
,它似乎更易於使用。
那么在 Main-UI + DB-Thread 這兩種方式之間進行通信的推薦方式是什么?
我應該簡單地創建 2+2 TSimpleEvent
嗎?
還是應該只有 1 個TEvent
?
更新 2:
第一次測試顯示:
TSimpleEvent
就足夠了(1 用於 Thread + 1 用於 Gui) 您應該將查詢移動到TThread
。 不幸的是,匿名線程在 D7 中不可用,因此您需要編寫自己的TThread
派生 class。 在里面,你需要它自己的數據庫連接來防止共享資源。 在調用者方法中,您可以等待線程結束。 結果應存儲在調用方 class 中的某處。 確保使用 TMutex 或 TMonitor 對查詢參數的訪問和存儲查詢結果的訪問是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.