Delphi 如何中断TThread.Synchronize()?
关闭应用程序时,我希望等待所有工作线程关闭,但如果其中一个工作线程刚刚调用了Synchronize,这将导致死锁。那么有没有中断同步的方法呢Delphi 如何中断TThread.Synchronize()?,delphi,c++builder,Delphi,C++builder,关闭应用程序时,我希望等待所有工作线程关闭,但如果其中一个工作线程刚刚调用了Synchronize,这将导致死锁。那么有没有中断同步的方法呢 我使用的是C++Builder 2010。理想情况下,停止使用Synchronize——就像大多数方便和简单的工具一样,它有着可怕的局限性。如果您真的需要让线程等待,则将消息发布到主线程,并等待类似TEvent的消息。这样,如果需要解除工作线程的阻塞,就可以简单地向事件发送信号。否则,在ProcessMessages上旋转直到完成所有操作。后者显然应该感觉
我使用的是C++Builder 2010。理想情况下,停止使用Synchronize——就像大多数方便和简单的工具一样,它有着可怕的局限性。如果您真的需要让线程等待,则将消息发布到主线程,并等待类似TEvent的消息。这样,如果需要解除工作线程的阻塞,就可以简单地向事件发送信号。否则,在ProcessMessages上旋转直到完成所有操作。后者显然应该感觉是一个丑陋的解决方案…举例说明为什么同步也是一个丑陋的解决方案。即使在调用TThread.WaitFor时调用CheckSynchronize,也有可能发生死锁的情况。有关可能的解决方法,请参阅。另请参阅本文。最简单的解决方法是永远不要使用同步。请改用异步TThread.Queue或PostMessage。@LURD只要让回调本身决定使用Synchronize或Queue,或者如果使用者再也不能处理回调,就不使用它们。我建议在窗体的CanClose上生成一个新线程,它可能会等待其他线程完成。这是终止你的应用程序的最干净的方式,并且会进行不必要的同步调用。