2012-11-11 86 views
0

總之我試圖實現一個GUI到我的網絡應用程序。他們都有mainloop(),所以我試圖把它們放到單獨的線程中,我使用boost :: thread。wxwidgets的mainloop()和boost :: thread

//standard initialization of boost::thread 
    GuiThread.join(); 
    NetworkThread.join(); 

但是,上述崩潰原因未知。我正在尋找任何方式來做同樣的事情,所以任何建議將不勝感激。

在此先感謝,紅。

編輯:

我創建wxWidgets的主循環中的boost ::線程GuiThread像這樣:

boost::thread GuiThread = boost::thread (boost::bind(&myAppClass::MainLoop(), this)); 

和Networkthread同樣的方式。

然後我重寫wxApp OnRun()函數,就像這樣:

int OnRun() { 
      GuiThread.join(); 
      NetworkThread.join(); 
      return 0; 
    } 

當我運行它(在VS2010),它說:MYAPP.EXE引發了斷點,如果我按繼續停止顯示窗口,如果我按開始它顯示我彙編。

+0

沒有足夠的信息。什麼崩潰,哪裏崩潰,如何崩潰... –

+0

@Igor R.我在那裏編輯它。 –

+0

你確定從其他線程訪問wxwidgets gui是合法的嗎?你最好把這個gui循環放在主要的thead中,並且只爲網絡循環啓動另一個線程。 –

回答

1

您必須從初始化庫的相同線程運行wxWidgets主循環。如果你想用非main的線程運行它,這意味着你不能使用標準的IMPLEMENT_APP()宏,但必須自己進行初始化,例如手動撥打wxEntry()

+0

對不起,但我有點wobWidgets noob。你可以提供更多關於調用wxEntry()的信息,並且我還可以讓我的主類一起處理聯網和gui,或者我將不得不創建只會爲gui繼承wxThread的類? –

+0

在最簡單的情況下,只需調用[wxEntry()](http://docs.wxwidgets.org/trunk/group__group__funcmacro__appinitterm.html#ga7d3eefb35631a5d8dfce97eb17340b21)即可。你不需要爲這個線程使用'wxThread',實際上如果你不這樣做會更好。 –

+0

哦,我現在看到。謝謝。 –

相關問題