作者:夹uh山下 | 来源:互联网 | 2022-12-08 19:29
手册说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
另一方面,编译器找到TThread :: Synchronize,但它不接受MainThreadID作为参数:
TThread::Synchronize(MainThreadID, MainForm->UpdateCaption );
PS:我是C++ Builder的新手.
1> Remy Lebeau..:
Synchronize()
是RTL TThread
类的一种方法.在所有版本的C++ Builder中,TThread
都有一个非静态版本Synchronize()
,它是您展示的代码试图调用的版本.这需要TCriticalThread
得出TThread
,例如:
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);
...
}