如何使用Synchronize()

How to use Synchronize()?

本文关键字:Synchronize 何使用      更新时间:2023-10-16

手册中说Synchronize是TThread的成员。但是,它显示您可以直接调用Synchronize。其他消息来源也有同感。

//Synchronize() performs actions contained in a routine as if they were executed from the main VCL thread    
void __fastcall TCriticalThread::Execute()
{
...
Synchronize(UpdateCaption);
...
}

但如果我这样做,我的编译器告诉我"E2268调用未定义的函数‘同步’"。我当然包括了图书馆:

#include <System.Classes.hpp>

另一方面,编译器可以找到TThread::Synchronize,但它不接受MainThreadID作为参数:

TThread::Synchronize(MainThreadID, MainForm->UpdateCaption );

PS:我是C++Builder的新手。

Synchronize()是RTL的TThread类的一个方法。在C++Builder的所有版本中,TThread都有一个非静态版本的Synchronize(),也就是您显示的代码试图调用的版本。这需要为TThread导出TCriticalThread,例如:

class TCriticalThread : public TThread
{
...
protected:
virtual void __fastcall Execute();
...
};
void __fastcall TCriticalThread::Execute()
{
...
Synchronize(UpdateCaption);
...
}

如果您的情况不是这样,TThread还有一个静态版本的Synchronize(),可以与非TThread派生的线程一起使用,例如:

void __fastcall TCriticalThread::Execute()
{
...
TThread::Synchronize(NULL, UpdateCaption);
...
}