Сообщения Windows обслуживаются во время отображения диалогового окна подтверждения?

StackOverflow https://stackoverflow.com/questions/1454058

  •  12-09-2019
  •  | 
  •  

Вопрос

У меня есть приложение MFC, которое порождает несколько различных рабочих потоков и скомпилировано с помощью VS2003.

При вызове CTreeCtrl::GetItemState() я иногда получаю всплывающее диалоговое окно подтверждения отладки.Я предполагаю, что это связано с тем, что я передал дескриптор недопустимого элемента, но это не моя непосредственная забота.

Меня беспокоит следующее:Судя по моим журналам, поток MFC продолжает обслуживать ряд сообщений Windows, пока отображается диалоговое окно подтверждения.Я думал, что диалог утверждения был модальным, поэтому мне было интересно, возможно ли это вообще?

Это было полезно?

Решение

Окно сообщения, показывающее ошибку утверждения, имеет насос сообщений для своих целей.Но он будет отправлять все поступающие сообщения, а не только те, которые отправляются в ящик сообщений (в противном случае что-то может быть заблокировано).

В обычном модальном диалоге это не проблема, поскольку родительское окно обычно отключается на время диалога.

Коду, запускающему диалоговое окно подтверждения, должно быть, не удалось определить родительское окно, и поэтому оно не было отключено.Это может произойти, если ваше главное окно не является активным на момент утверждения.Другие вещи также могут пойти не так.

Вы можете изменить способ, которым библиотека времени выполнения C Visual Studio сообщает об ошибках утверждения с помощью _CrtSetReportMode.Вы можете остановить его в отладчике и/или войти в окно вывода вместо того, чтобы пытаться отобразить диалоговое окно.

Другие советы

Диалоги (даже окно сообщений) должны прокачивать очередь сообщений, даже если они модальные.Иначе как они узнают, что вы нажали кнопку «ОК»?

Если вам нужно остановить все, когда срабатывает утверждение, обычно не так уж сложно написать собственную реализацию assert() (или ASSERT() или что-то еще), которое ворвется в отладчик вместо отображения окна сообщения с вопросом, хотите ли вы проникнуть в отладчик (возможно, только если он определит, что отладчик подключен).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top