【发布时间】:2011-11-18 10:52:03
【问题描述】:
我们有一个不响应任何用户输入的 MFC Visual-C++ 应用程序。
(注意:目前仅在一台机器上知道。该行为偶尔会再次出现,但仅在应用程序运行几天后才会出现!)
当我们通过 Alt-Tab(或任务栏)切换到应用程序时,会重绘该应用程序,但我们不能,例如,通过单击标题栏来激活它的主窗口。 p>
我们已经使用 WinDbg 提取了 4 个转储并检查了活动指令。我们总是在主线程(GUI线程)内的一些重绘代码或类似的东西中。我们确实不是处于模态消息循环中,并且主线程的堆栈总是看起来“OK”。 (大多数/所有工作线程都处于空闲状态,等待某个事件,也没有可疑代码。)
在调查Spy++ 的问题时,我们还看到in this separate question 指定的行为,即我们似乎收到了绘制和激活消息,但没有用户输入被路由到应用程序。当我在屏幕上有应用程序窗口并选择它以显示主窗口的消息时,
它只会显示“通用”“referesh”消息,不会显示其他信息
如果我钻得更深,并选择整个过程的所有消息,
这就是我们所看到的:
该应用显然只在一个隐藏的子窗口 (00CB09F0) 上处理消息,而我们看到的是稳定的 每秒 200 条 WM_PAINT 消息流。
通常,此子窗口根本不处理任何消息(Windows 发送消息时刷新 WM_PAINT 等除外)。它通常用作绘图区域,并且通过其父 (010A09B8) 窗口上的 WM_TIMER 消息进行绘图。 (不过,挂起的应用程序上也不会显示此 WM_TIMER 消息。)
进程资源管理器中显示的性能配置文件如下所示(100% 内核时间,或多或少):
【问题讨论】:
标签: windows winapi visual-c++ mfc window-messages