我有一个高速渲染应用程序,我想将日志消息输出到单独的窗口。应用程序是多线程的,并且所有线程都可能在任何给定时间记录某些内容。
我已经在使用控制台输出了,这很好用!
我做的是:
log()
的行为唤醒刷新线程)并且其工作是刷新所有将消息记录到文件和控制台。这对于文件和控制台日志记录都很好:既不关心他们接收打印调用的线程也不同于应用程序的主线程。但是,any other window you create does care。所以现在当我尝试打印到我创建的separate RichText window时,刷新线程不起作用。
所以这令人失望。现在唯一的解决方案是将 flush 线程代码移动到主线程(运行渲染循环的那个),这意味着显示可能会有很长的延迟一个框架(如果等待锁定日志队列以便输出它们),这是我不想要的。
答案 0 :(得分:0)
看起来你的冲洗线程看起来像冲突了:
这是一个工作线程,希望能够在没有工作要做的时候睡觉 - 可能在事件句柄上使用WaitForSingleObject
但是,如果线程创建了一个窗口,它现在需要表现为GUI线程 - 这意味着它不允许阻塞或等待,而是必须返回消息循环(GetMessage / TranslateMessage / DispatchMessage)当它完成它的工作时。
解决这种明显冲突的一种方法如下:
另一种方法(可能更多的工作,我认为上面的方法更可能更适合您现有的代码 - 但无论如何都提到这一点)如下: