レガシーコードで作業する必要があります。このコードには、メインスレッドで作成されたTTimer
があります。 OnTimer
イベントでは、タイマーはワーカースレッド内のいくつかのデータの状態を定期的にチェックしています。TTimer.OnTimerはワーカースレッドをメインスレッドと同期させますか?
擬似コード:
procedure MainForm.OnTimer(Sender: TObject);
begin
if WorkerThread.Data.State = full then
begin
WorkerThread.Free; //This freezes GUI.
end else
//Do something else.
end;
問題はWorkerThread
が終了したとき、私はいくつかのバックグラウンド操作をしたいということです。同期を避けるために、私はDoTerminate
メソッドをオーバーライドしました。しかし、この特定のケースでは、これは役に立たず、GUIはDoTerminate
が終了するまでフリーズします。
私は何とかフリーズを避けることができますか?
ありがとうございました。
だからあなたはDoTerminateで何をしていますか? –
データベースの一部です。私はGUIと同期していません。 – Wodzu
コードが不十分です。スレッド上でFreeを呼び出すと、TerminateとWaitForが呼び出されます。凍結について説明しますか? –