2011-04-01 123 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();