代码之家  ›  专栏  ›  技术社区  ›  The Unknown

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

  •  0
  • The Unknown  · 技术社区  · 15 年前

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

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   SteveL    15 年前

    日志最近在wxwidgets主干中有一些主要的更新,您可以阅读它们。 here . 其中之一是添加对来自非主线程的线程的日志记录的支持。

        2
  •  1
  •   DeusAduro    15 年前

    它以什么方式失败?我不熟悉wxtctrl,但除非它内置了同步(即线程安全),否则这可能是一个大问题。保护这种单一资源的最简单方法是通过一个名为“mutex”的方法。下面的示例是您可以在每个线程中执行的操作,以确保一次只有一个线程访问该资源(输出窗口)。

    // 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);
    

    所以这基本上保证了在等待和释放之间只能有一个线程。现在,如果您的问题实际上是路由到wxtctrl,我需要更多的细节。

    编辑: 我刚刚意识到我发布的是特定于Windows的,也许你不在Windows上!如果你没有,我没有其他平台同步方法的经验,但是Boost有一些非平台特定的通用库。