该手册说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);
   ...
}

10-08 17:41