该手册说Synchronize是TThread的成员。
但是,它表明您可以直接调用同步。其他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 );
PS:我是C++ Builder的新手。
最佳答案
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);
...
}