我正在使用TIdHttpServer处理一些命令,问题是某些命令正在丢失,我的猜测是这是由于我正在更新OnConnect内的vcl。

我该如何使用Synchronize方法来安全更新VCL?

最佳答案

这很容易,只需用GUI线程要调用的任何TThread.Synchronize()调用TThreadMethodTThreadMethod是无参数的procedure of object,但是由于进行调用的辅助线程被阻塞,直到GUI线程执行了同步方法之后,您才可以在同步方法中使用TThread成员,而无需任何进一步的保护。

只是为了完整起见,我应该提到有几种选择,所有这些都比较好(即使我没有尝试过,因为没有什么会更糟了)。 Indy具有TIdSyncTIdNotify类,您可以从中派生这些类来携带变量和实现自定义方法。较新的Delphi版本具有TThread.Queue()TThread.ForceQueue(),它们可以使用匿名方法来生成闭包(带有捕获的变量),该闭包可以由GUI线程执行而不会阻塞调用线程。还有PostMessage()PostThreadMessage() API-这是一种通信系统,自D3 / W95起一直运行,没有任何变化,并且肯定会在Windows上永久可用。

关于delphi - TIdHttpServer与VCL同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9772317/

10-11 15:33