class TLoadingThread : public TThread
{
protected:
virtual void __fastcall Execute();
void Spin(); //to be synchronized
public:
__fastcall TLoadingThread();
void __fastcall GentleStop();
long m_Stop;
};
我的执行方法:
void __fastcall TLoadingThread::Execute()
{
while (!m_Stop)
{
Sleep(1000);
Synchronize(&Spin);
}
m_Stop = 0;
}
导致编译器错误:
[bcc32 Error] WaitInfoWindow.cpp(59): E2285 Could not find a match for 'TThread::Synchronize(void (* (_closure )())())'
Full parser context
WaitInfoWindow.cpp(55): parsing: void _fastcall TLoadingThread::Execute()
也
Synchronize(Spin);
原因
[bcc32 Error] WaitInfoWindow.cpp(59): E2285 Could not find a match for 'TThread::Synchronize(void)'
Full parser context
WaitInfoWindow.cpp(55): parsing: void _fastcall TLoadingThread::Execute()
我只读了一些Synchronize(& Spin);适用于其他人 同步(自旋);和同步(& Spin);也工作,但我没有这些工作。 我正在使用:
X3 C ++ Builder Update1。 也许我应该更改编译器设置的东西?
最好的问候
托马斯
答案 0 :(得分:0)
免责声明:我不熟悉C ++ Builder。它似乎与C ++有一些不兼容/扩展。
TThread.Synchronize
的文档显示了两种适合您的呼叫方法:
void __fastcall Synchronize(TThreadMethod AMethod)/* overload */;
void __fastcall Synchronize(_di_TThreadProcedure AThreadProc)/* overload */;
第一条错误消息提示指向__closure
的指针。在C ++中,要传递方法的地址,您宁愿说
Synchronize(&TLoadingThread::Spin);
虽然,我不知道,这是否在C ++ Builder中有效。
对于第二条错误消息,可能会将其解释为调用至Spin
,从而导致void
。当然,根据文档没有TThread::Synchronize(void)
。但这只是猜测。
Synchronize(Spin)
为某些人工作而Synchronize(&Spin)
为其他人工作的不同报告可能是Synchronize
的第二次重载,这似乎是指向一个函数的指针。将指针传递给函数可以是普通的
Synchronize(function_name);
或前缀为&
Synchronize(&function_name);
答案 1 :(得分:0)
不幸的是
Synchronize(&TLoadingThread::Spin);
yelds:
[bcc32 Error] WaitInfoWindow.cpp(71): E2285 Could not find a match for 'TThread::Synchronize(void (TLoadingThread::*)())'
Full parser context
WaitInfoWindow.cpp(67): parsing: void _fastcall TLoadingThread::Execute()
我完全无助,我发现的每个例子都表明我没有弄错,但编译器一直报告错误。 这让我很生气:/