整个下午都在为此苦苦挣扎。我的线程类是:
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()
我只阅读了一些同步(和旋转(作品,对于其他人两者都有效同步(旋转(;和同步(和旋转(;工作也,但我这些都不是。我正在使用:
X3 C++生成器更新1。也许是我应该更改编译器设置的内容?
此致敬意
托马斯
免责声明:我不熟悉C++生成器。它似乎对C++有一些不兼容/扩展。
TThread.Synchronize
的文档显示了两种适合您的调用的方法:
void __fastcall Synchronize(TThreadMethod AMethod)/* overload */;
void __fastcall Synchronize(_di_TThreadProcedure AThreadProc)/* overload */;
第一条错误消息提示指向__closure
的指针。C++,要传递方法的地址,你宁愿说
Synchronize(&TLoadingThread::Spin);
虽然,我不能说,这在C++生成器中是否有效。
对于第二条错误消息,可能将其解释为对Spin
的调用,从而导致void
。而且,当然,根据文档没有TThread::Synchronize(void)
。但这只是一个猜测。
Synchronize(Spin)
为某些人工作而Synchronize(&Spin)
为其他人工作的不同报告可能是针对Synchronize
的第二次重载,这似乎需要一个指向函数的指针。将指针传递给函数可以通过普通
Synchronize(function_name);
或通过前缀加上&
Synchronize(&function_name);
不幸的是
Synchronize(&TLoadingThread::Spin);
呐喊:
[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()
我完全无助,我找到的每个示例都表明我没有犯错,但编译器不断报告错误。这让我发疯:/