我的理解是,任何模态对话框都会在专用于该对话框的线程上自动运行其自身的消息泵-是吗?
如果是这样,模式对话框的存在如何影响主应用程序的消息循环?两者是否并行运行,是否优先?
我遇到一种情况,模态对话框似乎在等待几秒钟而被卡住,并想知道是否有可能该对话框被迫等到主应用程序线程不忙?
正如IInspectable所述,模式对话框将在与调用方相同的线程中运行。因此,如果从具有主消息循环的主UI线程运行对话框,则最终将导致嵌套消息循环。堆栈看起来像:
WinMain
YourMainMessageLoop
DispatchMessage
SomeMessageHandler
DoModal
Run Code Online (Sandbox Code Playgroud)
和DoModal旋转在其自己的GetMessage/ TranslateMessage/ DispatchMessage循环。YourMainMessageLoop就其仍在运行而言,主消息循环(在上面的示例堆栈中)处于“活动”状态,但是被对话框的消息循环阻止。执行YourMainMessageLoop直到DoModal退出都不会返回。
请注意,即使你是模态对话框的消息循环中,你的其他窗口仍然会处理消息,因为GetMessage和DispatchMessage仍将检索和直接的信息,以这些窗口和调用它们WndProc秒。
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |