从多个线程收集日志消息并使用窗口显示全部消息的最佳方法是什么? (而线程正在运行)。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