手册上说Synchronize是TThread的一个成员。但是,它表明您可以直接调用Synchronize。其他sources也是如此。
//Synchronize() performs actions contained in a routine as if they were executed from the main VCL thread
void __fastcall TCriticalThread::Execute()
{
...
Synchronize(UpdateCaption);
...
}
但是如果我这样做了,我的编译器告诉我"E2268调用未定义的函数'Synchronize'“。当然,我还包括了这个库:
#include <System.Classes.hpp>
另一方面,编译器可以找到TThread::Synchronize,但它不接受MainThreadID作为参数:
TThread::Synchronize(MainThreadID, MainForm->UpdateCaption );
附言:我是C++生成器的新手。
发布于 2018-08-03 08:10:14
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);
...
}
https://stackoverflow.com/questions/51652768
复制相似问题