首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Synchronize()?

如何使用Synchronize()?
EN

Stack Overflow用户
提问于 2018-08-02 19:42:49
回答 1查看 1.2K关注 0票数 2

手册上说Synchronize是TThread的一个成员。但是,它表明您可以直接调用Synchronize。其他sources也是如此。

代码语言:javascript
运行
复制
//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'“。当然,我还包括了这个库:

代码语言:javascript
运行
复制
#include <System.Classes.hpp>

另一方面,编译器可以找到TThread::Synchronize,但它不接受MainThreadID作为参数:

代码语言:javascript
运行
复制
TThread::Synchronize(MainThreadID, MainForm->UpdateCaption );

附言:我是C++生成器的新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 08:10:14

Synchronize()是RTL的TThread类的方法。在所有版本的C++Builder中,TThread都有一个非静态版本的Synchronize(),这是您所展示的代码试图调用的版本。这需要为TThread派生TCriticalThread,例如:

代码语言:javascript
运行
复制
class TCriticalThread : public TThread
{
...
protected:
    virtual void __fastcall Execute();
...
};

void __fastcall TCriticalThread::Execute()
{
   ...
   Synchronize(UpdateCaption);
   ...
}

如果您的情况不是这样,TThread也有一个静态版本的Synchronize(),可以用于不是从TThread派生的线程,例如:

代码语言:javascript
运行
复制
void __fastcall TCriticalThread::Execute()
{
   ...
   TThread::Synchronize(NULL, UpdateCaption);
   ...
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51652768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档