我想在我的程序中使用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
),但我还是不知道该怎么做。