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