2011-04-01 128 views
0

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

请多关照..

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

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

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

0

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

你确定GUIFrame和threadFrame可以隐式转换成每一种吗?你叫mythread(threadFrame); 你确定你的Entry()函数是在你的mythread类中声明的吗? 最后,我声明entry()函数如下我的“.h”文件:virtual void * Entry();