繁体   English   中英

有没有办法做TThread.Synchronize与超时?

[英]Is there a way to do TThread.Synchronize with Timeout?

有时您需要调用TThread.Synchronize ,但是您也可能会陷入僵局

例如:

Thread1.execute
procedure
begin
  ....
  TThread.Synchronize(..)
  ...
end;

然后在主线程中执行以下操作:

Thread1.terminate;
Thread1.waitfor;

可能会陷入僵局,因为TThread.Synchronize永远不会成功:(我想知道处理这种情况的最简单方法。

无法将TThread.Synchronize()与超时一起使用。

您可以改用TThread.Queue() ,向其传递与TEvent相关的过程,您可以在Queue()退出后等待该过程。 然后,主线程可以在处理请求时向TEvent发出信号(只是确保在主线程使用完TEvent之后才释放TEvent ,除非您首先调用TThread.RemoveQueuedEvents()取消请求)。

话虽这么说,您所描述的并不是死锁情况。 如果在主UI线程中调用了TThread.WaitFor() ,它将在等待线程终止时处理未决的Synchronize() / Queue()请求。 如果在另一个线程中调用了TThread.WaitFor() ,则主UI线程可以自由地正常处理Synchronize() / Queue()请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM