我正在调试一个在其消息循环中调用IsDialogMessage()的应用程序。偶尔,IsDialogMessage()永远不会返回(永远不会超过1小时的间隔)。根据Microsoft的符号服务器提供的user32.dll符号,它似乎卡在GetNextDlgGroupItem()(或同一个内部变体)中,迭代了一些窗口集。为什么IsDialogMessage()永远不会返回?
该应用程序是多线程的,并经常接收外部事件的通知,这些事件以DCOM调用的形式到达。我怀疑这样的调用是以错误的方式处理某种窗口状态的。如果我能够知道什么样的状态腐败可能导致IsDialogMessage()中的无限循环,我想我会更容易地识别腐败的来源。
这是可能的;有很多控件在使用,有些可能会被禁用。 – 2009-11-12 00:48:49