從多個線程收集日誌消息並使用窗口顯示全部消息的最佳方法是什麼? (而線程正在運行)。C++ WxWidgets:來自多個線程的消息的單個日誌窗口
我目前正在嘗試將stdout(cout)重定向到wxTextCtrl,但在嘗試在多個線程上執行操作時發生失敗。任何幫助,將不勝感激。
從多個線程收集日誌消息並使用窗口顯示全部消息的最佳方法是什麼? (而線程正在運行)。C++ WxWidgets:來自多個線程的消息的單個日誌窗口
我目前正在嘗試將stdout(cout)重定向到wxTextCtrl,但在嘗試在多個線程上執行操作時發生失敗。任何幫助,將不勝感激。
日誌記錄在wxWidgets主幹中最近有幾個主要更新,你可以閱讀關於他們here。其中之一是添加對主線程以外線程的日誌記錄支持。
它以何種方式失敗?我不熟悉wxTextCtrl,但除非它已經建立在同步(即它的線程安全),這可能是一個大問題。像這樣保護單個資源的最簡單方法是通過一個名爲「互斥體」。以下示例是您可以在每個線程中執行的操作,以確保一次只能訪問此資源(輸出窗口)。
// In each thread's initialization:
HANDLE mutexHandle = CreateMutex(0,FALSE,"__my_protecting_mutex__");
// Whenever you use the debug output:
WaitForSingleObject(mutexHandle, /* Timeout if you like. */ 0xFFFFFFFF);
// Do our printing here.
ReleaseMutex(mutexHandle);
// In each thread's cleanup:
CloseHandle(mutexHandle);
所以這基本上保證只有一個線程可以等待和釋放之間是英寸現在如果你的問題實際上是路由到wxTextCtrl,我需要一些更多的細節。
編輯:我剛剛意識到,我發佈的是Windows特定的,也許你不在窗戶上!如果你不是,我沒有其他平臺的同步方法的經驗,但增強有一些通用的庫,這是不是平臺特定的。
wxWidgets具有內置的跨平臺wxMutex類 http://docs.wxwidgets.org/stable/wx_wxmutex.html – GRB 2009-07-15 03:32:20