multithreading - TTimer.OnTimer是否会使工作线程与主线程同步?

标签 multithreading delphi timer delphi-2009

我必须使用遗留代码。该代码在主线程中创建了一个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方法。但是,在这种特殊情况下,这无济于事,并且在DoTerminate完成之前,我的GUI被冻结。

我能以某种方式避免冻结吗?

谢谢。

最佳答案

这里没有足够的代码来确定任何内容。但是,在线程上调用Free会导致对Terminate的调用,然后是WaitFor的调用。很可能没有等待返回,这与冻结的UI一致。

关于multithreading - TTimer.OnTimer是否会使工作线程与主线程同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8654111/

相关文章:

c++ - 原子读取是否保证读取到最新值?

c# - 后台 worker 没有停止

java - 如何在java中最有效且无需同步地使用多个线程?

delphi - 枚举常量属性不流式传输

Java时钟同步

c# - 定时器和线程的问题

delphi - 重新编译 RTL - 如果可能,那么如何?

delphi - 如何在delphi上访问midi percussion?

java - 如何将秒表 JavaScript 中的数据存储到 MySQL

c - linux下1ms分辨率定时器推荐方式