C ++ WxWidgets:来自多线程的消息的单一日志窗口

时间:2009-07-15 01:28:32

标签: c++ multithreading wxwidgets logging

从多个线程收集日志消息并使用窗口显示它们的最佳/正确方法是什么? (当线程正在运行时)。

我目前正在尝试将stdout(cout)重定向到wxTextCtrl,但在尝试通过多个线程执行此操作时失败了。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:3)

最近在wxWidgets主干中记录了几个主要的更新,你可以阅读它们here。其中之一是添加对主线程以外的线程进行日志记录的支持。

答案 1 :(得分:1)

它以什么方式失败?我不熟悉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有一些非特定于平台的通用库。