WxWidgets线程在运行期间随机崩溃

时间:2011-04-01 16:39:33

标签: multithreading user-interface wxwidgets

我正在编写一个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;
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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