线程不做任何事情

时间:2016-11-15 09:31:24

标签: c++ multithreading wxwidgets

我尝试使用一个线程告诉用户他输入的串口通信的COM端口是错误的。我有一个线程类,它尝试在我的main中建立连接和一个函数,它应该告诉用户。 编译器没有抱怨,但我的程序从不进入该功能。也许任何人都可以发现我犯的错误。

main.cpp中:

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

void WindowsDgpsGUIFrame::OnButtonStartClick(wxCommandEvent& event)
{
    NavigationThread* navigationThread = new NavigationThread(this, m_usedVariables);
    m_navigationThread = navigationThread;
    wxThreadError err = m_navigationThread->Create();
    if(err != wxTHREAD_NO_ERROR)
    {
        StaticStatusText->Enable();
        StaticStatusText->SetLabel("Could not create NavigationThread.");
    }
    else{
        StaticStatusText->SetLabel("Thread created");
    }

    err = m_navigationThread->Run();

    if(err != wxTHREAD_NO_ERROR)
    {
        StaticStatusText->SetLabel("Could not run thread.");
    }

}

void WindowsDgpsGUIFrame::onConnectionFailed(wxThreadEvent& event)
{
    StaticConnectionText->SetLabel(event.GetString());
}

thread.cpp:

wxThread::ExitCode NavigationThread::Entry()
{
    Serial serial;
    int resultGnss = serial.Open(m_gnssPort, STANDARD_BAUDRATE);
    wxThreadEvent event(wxEVT_THREAD, wxID_RETRY);

    if(resultGnss != 0)
    {

        event.SetString("Connection to GNSS box not possible. Try with another COM port.");
        m_parent->GetEventHandler()->AddPendingEvent(event);

    }
    else{
        event.SetString("Connection successful");
        m_parent->GetEventHandler()->AddPendingEvent(event);
    }
    return 0;
}

线程被创建并开始运行,但即使事件在线程中抛出,程序也永远不会到达onConnectionFailed()

0 个答案:

没有答案