[英]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.