【发布时间】:2010-11-10 20:46:27
【问题描述】:
从多个线程收集日志消息并使用窗口显示它们的最佳/正确方法是什么? (当线程正在运行时)。
我目前正在尝试将 stdout (cout) 重定向到 wxTextCtrl,但在尝试通过多个线程执行此操作时失败了。任何帮助,将不胜感激。
【问题讨论】:
标签: c++ multithreading wxwidgets logging
从多个线程收集日志消息并使用窗口显示它们的最佳/正确方法是什么? (当线程正在运行时)。
我目前正在尝试将 stdout (cout) 重定向到 wxTextCtrl,但在尝试通过多个线程执行此操作时失败了。任何帮助,将不胜感激。
【问题讨论】:
标签: c++ multithreading wxwidgets logging
日志记录最近在 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 的,也许你不在 Windows 上!如果你不是,我没有其他平台同步方法的经验,但是 boost 有一些不是特定于平台的通用库。
【讨论】: