我正在编写一个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;
}
答案 0 :(得分:2)
您不应该使用主线程以外的线程中的任何GUI例程。
这意味着您应该通过其他一些机制替换->SetValue(..)
调用(例如,通过事件通知主线程)。
我从来没有试过这样做,所以我不知道这是否会导致线程崩溃。
您是否调用任何不适合分离线程的函数?
答案 1 :(得分:0)
如果您使用互斥函数,则可以从其他线程访问GUI:wxMutexGuiEnter()和wxMutexGuiLeave()。
你确定GUIFrame和threadFrame可以隐式地转换成每个吗?你调用mythread(threadFrame); 你确定你的mythread类中声明了你的Entry()函数吗? 最后,我将entry()函数声明为跟随我的“.h”文件:virtual void * Entry();