Работает ли приложение GetMessage даже во время MessageBox?

Во время обработки WM_TIMER я вызвал MessageBox. В результате всплыло окно сообщения с частотой таймера. Поэтому я считаю, что приложение пыталось продолжать обрабатывать сообщения в очереди / без очереди даже во время MessageBox.

Я прав?

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

Существуют ли какие-либо другие функции, которые могут пытаться продолжать обрабатывать помещенные в очередь / не поставленные в очередь сообщения перед их возвратом, кроме MessageBox и SendMessage? Мне нужно знать об этом, чтобы определить, должны ли какие-либо функции, вызываемые в процедуре Window, быть реентерабельными.

Еще два важных вопроса: 1) DispatchMessage не возвращается, пока не вернется оконная процедура? 2) Будет ли GetMessage больше не вызываться, если текущее DispatchMessage еще не возвращено?

1 ответ

Модальное диалоговое окно запускает свой собственный цикл сообщений внутри, используя очередь сообщений вызывающего потока. Ты звонишь MessageBox() внутри вашего WM_TIMER обработчик, поэтому цикл сообщений внутри MessageBox() получает и отправляет последующие WM_TIMER сообщения во время работы окна сообщения.

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