【问题标题】:How to log/monitor selected WM_USER+n Windows messages?如何记录/监控选定的 WM_USER+n Windows 消息?
【发布时间】:2015-04-28 17:26:06
【问题描述】:

我的代码中的一些对话框和数据模块需要延迟执行,并通过调用 PostMessage() 来实现。这不是跨模块的,即数据模块将具有在那里发出的 PostMessage 的处理程序,对话框也是如此。

(当然?)不同模块中的代码之间存在交互。

我想跟踪我的程序运行时某些特定消息的处理顺序。

(如何)在 Delphi XE2 中可以做到这一点?

一切都在主 UI 线程中运行。


补充说明:

  • 简单地设置断点是行不通的(我认为)。其中一些消息可以多次触发(想想“向根更新树列表节点”),当我停在断点上时,我害怕干扰。
  • 示例序列:用户启动代码执行,在对话框中以 PostMessage(X) 结尾,底层 Delphi 事件调用必须首先完成执行的数据模块中的第三方软件,我执行 PostMessage(Y) 以“等待”直到完毕。我怀疑 Ys 在 X 之后被处理。

【问题讨论】:

    标签: delphi delphi-xe2 monitoring message-queue


    【解决方案1】:

    最干净的方法是记录消息。日志记录允许您检查程序的操作,而不会像交互式调试断点那样干扰它。对于消息处理,正如您所发现的,断点的干扰使理解流程变得相当困难。

    由于您要发布消息,它们由线程的消息队列处理。假设有问题的线程是主 UI 线程,那么您可以使用 Application.OnMessage 作为您的钩子来执行日志记录。 VCL 消息循环处理的所有排队消息都通过此事件。通常最好使用TApplicationEvents 实例来处理Application 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多