wxwidgets中的绑定线程

时间:2016-11-15 07:57:52

标签: c++ multithreading wxwidgets

我想在我的程序中使用wxThread。线程应该通过COM端口建立串行连接,并且应该在COM端口错误/未建立连接的情况下发生事件。在这种情况下,我的主框架应该询问用户另一个COM端口。

由于我不太确定什么是最好的事件,我尝试使用wxThreadEvent。现在我有一个动态将事件绑定到函数的问题,因为我发现here的示例对我不起作用。这是我的代码:

WindowsDgpsGUIMain.cpp:

WindowsDgpsGUIFrame::WindowsDgpsGUIFrame(wxWindow* parent,wxWindowID id)
{
 ...
 Bind(wxEVT_THREAD, &onConnectionFailed, wxID_RETRY);
}

void WindowsDgpsGUIFrame::onConnectionFailed(wxThreadEvent& event)
{
  ;
}

WindowsDgpsGUIMain.h:

class WindowsDgpsGUIFrame: public wxFrame
{

    public:

        WindowsDgpsGUIFrame(wxWindow* parent,wxWindowID id = -1);
        virtual ~WindowsDgpsGUIFrame();

    private:

        //(*Handlers(WindowsDgpsGUIFrame)
        void OnQuit(wxCommandEvent& event);
        void OnAbout(wxCommandEvent& event);
        void OnButtonTracksClick(wxCommandEvent& event);
        void OnButtonPortsClick(wxCommandEvent& event);
        void OnButtonRewriteConfigClick(wxCommandEvent& event);
        void OnClose(wxCloseEvent& event);
        //*)
        void onConnectionFailed(wxThreadEvent& event);
  ...
  }

当我尝试这样做时,我收到了这个错误:

||=== Build: Debug in WindowsDgpsGUI (compiler: GNU GCC Compiler) ===|
D:\WindowsDgps\WindowsDgpsGUI\WindowsDgpsGUIMain.cpp||In constructor 'WindowsDgpsGUIFrame::WindowsDgpsGUIFrame(wxWindow*, wxWindowID)':|
D:\WindowsDgps\WindowsDgpsGUI\WindowsDgpsGUIMain.cpp|165|error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say '&WindowsDgpsGUIFrame::onConnectionFailed' [-fpermissive]|
C:\wxWidgets-3.0.2\include\wx\event.h||In instantiation of 'void wxEventFunctorFunctor<EventTag, Functor>::operator()(wxEvtHandler*, wxEvent&) [with EventTag = wxEventTypeTag<wxThreadEvent>; Functor = void (WindowsDgpsGUIFrame::*)(wxThreadEvent&)]':|
D:\WindowsDgps\WindowsDgpsGUI\WindowsDgpsGUIMain.cpp|342|required from here|
C:\wxWidgets-3.0.2\include\wx\event.h|516|error: must use '.*' or '->*' to call pointer-to-member function in '((wxEventFunctorFunctor<wxEventTypeTag<wxThreadEvent>, void (WindowsDgpsGUIFrame::*)(wxThreadEvent&)>*)this)->wxEventFunctorFunctor<wxEventTypeTag<wxThreadEvent>, void (WindowsDgpsGUIFrame::*)(wxThreadEvent&)>::m_handler (...)', e.g. '(... ->* ((wxEventFunctorFunctor<wxEventTypeTag<wxThreadEvent>, void (WindowsDgpsGUIFrame::*)(wxThreadEvent&)>*)this)->wxEventFunctorFunctor<wxEventTypeTag<wxThreadEvent>, void (WindowsDgpsGUIFrame::*)(wxThr|
||=== Build failed: 2 error(s), 4 warning(s) (0 minute(s), 1 second(s)) ===|

我不明白我做错了什么,因为我试图使用上面提供的检查。 wxID对此很重要吗?我不太确定它们是如何工作的,所以我想用一个描述我想做的最好的(因为我知道它们只是一些整数)...

感谢任何帮助。

编辑:我知道this线程有关同一错误,但它对我没有帮助。我试图相应地更改代码,但它不起作用,老实说,在我的情况下似乎没有意义。虽然错误非常清楚(至少是ISO++...部分,因为我从未接触过event.h),但我还是不知道该怎么做。

0 个答案:

没有答案