C++生成器 X3 同步错误



整个下午都在为此苦苦挣扎。我的线程类是:

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()

完全无助,我找到的每个示例都表明我没有犯错,但编译器不断报告错误。这让我发疯:/

最新更新