如何使用Synchronize()?

时间:2018-08-02 11:42:49

标签: c++ multithreading delphi thread-safety c++builder

手册中说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的新手。

1 个答案:

答案 0 :(得分:5)

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

TThread

如果您的情况并非如此,则class TCriticalThread : public TThread { ... protected: virtual void __fastcall Execute(); ... }; void __fastcall TCriticalThread::Execute() { ... Synchronize(UpdateCaption); ... } 还具有TThread的静态版本,该静态版本可以与不是从Synchronize()派生的线程一起使用,例如:

TThread