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