【问题标题】:WxWidgets Thread crashes random during runWxWidgets 线程在运行期间随机崩溃
【发布时间】:2011-04-01 16:39:32
【问题描述】:

我正在编写一个 wxwidget 多线程应用程序。但是代码随机崩溃,我不知道。我已经在这里发布了我的代码。每次按下按钮时,该程序都会创建一个线程。这个线程旨在在父文本区域上写一些东西。当我运行代码时,只打印析构函数消息,即不执行 Entry 部分。我已经为这个问题苦苦挣扎了很长时间。任何帮助将不胜感激。

提前谢谢你..

   void threadFrame::addthread(wxCommandEvent &event)
{
    mythread *th = new mythread(this);
    th->Create();
    th->Run();
}
mythread::mythread(GUIFrame *frame) : wxThread(wxTHREAD_DETACHED)
{
    m_frame = frame;
}
;
mythread::~mythread()
{
    WriteText(wxT("destructor"));
}
void mythread::WriteText(const wxString& text)
{
    m_frame->m_textCtrl1->SetValue(text);
}

void *mythread::Entry()
{
    WriteText(wxT("thread started"));
    return NULL;
}

【问题讨论】:

    标签: multithreading user-interface wxwidgets


    【解决方案1】:

    您不应使用主线程以外的线程中的任何 GUI 例程。 这意味着您应该用其他机制替换 ->SetValue(..) 调用(例如,通过事件通知主线程)。 我从来没有尝试过这样做,所以我不知道这是否会导致线程崩溃。

    你是否调用了任何不适合分离线程的函数?

    【讨论】:

      【解决方案2】:

      如果您使用 Mutex 函数,您可以从其他线程访问 GUI:wxMutexGuiEnter () 和 wxMutexGuiLeave ()。

      您确定 GUIFrame 和 threadFrame 可以隐式地转换为每个 over 吗?你调用 mythread(threadFrame); 你确定你的 Entry() 函数是在你的 mythread 类中声明的吗? 最后,我按照我的“.h”文件声明 entry() 函数:virtual void * Entry();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 2014-10-17
        • 2013-08-23
        相关资源
        最近更新 更多