WeG*_*ars 2 c++ delphi multithreading c++builder thread-safety
手册说Synchronize是TThread的成员.但是,它表明您可以直接调用Synchronize.其他消息来源也是如此.
//Synchronize() performs actions contained in a routine as if they were executed from the main VCL thread
void __fastcall TCriticalThread::Execute()
{
...
Synchronize(UpdateCaption);
...
}
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,我的编译器告诉我"E2268调用未定义的函数'同步'".当然我包括了图书馆:
#include <System.Classes.hpp>
Run Code Online (Sandbox Code Playgroud)
另一方面,编译器找到TThread :: Synchronize,但它不接受MainThreadID作为参数:
TThread::Synchronize(MainThreadID, MainForm->UpdateCaption );
Run Code Online (Sandbox Code Playgroud)
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);
...
}
Run Code Online (Sandbox Code Playgroud)
如果在您的情况下不是这种情况,那么TThread它的静态版本Synchronize()也可以与非派生的线程一起使用TThread,例如:
void __fastcall TCriticalThread::Execute()
{
...
TThread::Synchronize(NULL, UpdateCaption);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
471 次 |
| 最近记录: |