Я занимаюсь разработкой простого приложения WinAPI и начал с написания собственной системы утверждений.
У меня есть макрос, определенный как ASSERT(X)
, который делает почти то же самое, что и assert(X)
, но с большей информацией, большим количеством опций и т. Д.
В какой-то момент (когда эта система утверждений уже работала и работала) я понял, что есть проблема.
Предположим, я написал код, который выполняет какое-то действие, используя таймер, и (просто пример) это действие выполняется при обработке сообщения WM_TIMER
. И теперь ситуация меняет способ, которым этот код начинает выдавать утверждение. Это сообщение об утверждении будет отображаться каждые TIMER_RESOLUTION
миллисекунд и будет просто заполнять экран.
Варианты решения этой ситуации могут быть:
1) Полностью приостановить выполнение приложения (возможно, также приостановить все потоки), когда отображается окно сообщения подтверждения, и продолжить работу после его закрытия.
2) Создайте статический счетчик для показанных подтверждений и не отображайте подтверждения, когда один из них уже отображается (но это не приостанавливает приложение)
3) Группировать подобные утверждения и показывать только по одному для каждого типа утверждений (но это также не приостанавливает применение)
4) Измените код приложения (например, цикл сообщений Get / Translate / Dispatch
), чтобы он приостанавливался при наличии подтверждений. Это хорошо, но не универсально и похоже на взлом.
На мой взгляд, вариант № 1 является лучшим. Но я не знаю, как это можно сделать. То, что я ищу, - это способ приостановить время выполнения (что-то похожее на кнопку Pause
в отладчике). Кто-нибудь знает, как этого добиться?
Кроме того, если кто-то знает эффективный способ решения этой проблемы - я был бы признателен за вашу помощь. Спасибо.