Как регистрировать / отслеживать выбранные сообщения WM_USER+n Windows?

Некоторые диалоги и модули данных в моем коде должны задерживать выполнение и делать это, вызывая PostMessage(). Это не распространяется на модули, т. Е. Модуль данных будет иметь обработчик для PostMessage, выпущенного там, как и диалоговое окно.

Существует (конечно?) Взаимодействие между кодом в разных модулях.

Я хочу проследить, в каком порядке некоторые конкретные сообщения обрабатываются при запуске моей программы.

(Как) я могу сделать это в Delphi XE2?

Все работает в основном потоке пользовательского интерфейса.


Дополнительные примечания:

  • Простая установка точек останова не работает (я думаю). Некоторые из этих сообщений могут запускаться более одного раза (например, "обновление узлов дерева списка по направлению к корню"), и я боюсь вмешиваться, когда останавливаюсь на точках останова.
  • Пример последовательности: пользователь запускает выполнение кода, которое заканчивается диалоговым окном PostMessage(X), лежащие в основе Delphi события вызывают стороннее программное обеспечение в модуле данных, который должен завершиться первым, я выполняю PostMessage(Y), чтобы "подождать", пока это не будет сделано. Я подозреваю, что Ys обрабатываются после X.

1 ответ

Решение

Самый чистый способ сделать это - зарегистрировать сообщения. Ведение журнала позволяет вам проверить работу программы, не нарушая ее, как это может случиться с контрольными точками интерактивной отладки. А для обработки сообщений, как вы обнаружили, нарушение точек останова затрудняет понимание потока.

Поскольку вы публикуете сообщения, они обрабатываются очередью сообщений потока. Предполагая, что рассматриваемый поток является основным потоком пользовательского интерфейса, вы можете использовать Application.OnMessage как ваш крюк для ведения журнала. Все сообщения в очереди, которые обрабатываются циклом сообщений VCL, проходят через это событие. Обычно лучше всего использовать TApplicationEvents экземпляр для обработки Application События.

Другие вопросы по тегам