C ++ Builder X3同步错误

时间:2018-02-03 12:26:06

标签: c++ builder

整个下午都在努力解决这个问题。 我的线程类是:

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。 也许我应该更改编译器设置的东西?

最好的问候

托马斯

2 个答案:

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

我完全无助,我发现的每个例子都表明我没有弄错,但编译器一直报告错误。 这让我很生气:/