【发布时间】:2011-07-29 20:01:18
【问题描述】:
在一个 C++ 应用程序中,我有一个窗口,其消息循环在单独的线程中运行,因为主线程正忙于计算和渲染模拟。该窗口充当模拟的日志窗口。当模拟抛出异常时,模拟关闭,日志窗口显示详细信息。
现在主线程应该等到日志窗口关闭。由于消息循环在单独的线程上运行,因此我尝试了
WaitForSingleObject(logwindow->thread, INFINITE);
来自主线程。
但是,这似乎阻止了消息泵并且日志窗口冻结。那么如何正确等待窗口关闭或线程结束呢?
ED:窗口是在主线程上创建的,但在不同的线程上运行。我将继续进行更改,以便它也在消息循环线程上创建。
【问题讨论】:
-
窗口最初是在哪个线程中创建的? windows 不应在 WinAPI 中的线程之间迁移
-
好的,我会确保它也在循环线程上创建。
-
INFINITE就是您所期望的。如果您从未向该线程发出信号,它将永远等待。添加代码以指示线程继续或指定超时值而不是INFINITE。附言您可以在处理 WM_CLOSE 时向您的另一个窗口发送自定义消息,让他知道它而不是阻止并加入线程。 -
如果您在主线程上创建它,那么它的所有消息也将由主线程泵送!
-
这对我来说是新的,谢谢!
标签: c++ windows multithreading