Работает ли приложение GetMessage даже во время MessageBox?
Во время обработки WM_TIMER я вызвал MessageBox. В результате всплыло окно сообщения с частотой таймера. Поэтому я считаю, что приложение пыталось продолжать обрабатывать сообщения в очереди / без очереди даже во время MessageBox.
Я прав?
Я знаю, что в соответствии с MSDN, когда приложение отправляет сообщение в другой поток из потока отправки, поток отправки будет пытаться обрабатывать сообщения, не находящиеся в очереди, которые он получает до того, как SendMessage вернется, т.е. до того, как целевой поток ответит.
Существуют ли какие-либо другие функции, которые могут пытаться продолжать обрабатывать помещенные в очередь / не поставленные в очередь сообщения перед их возвратом, кроме MessageBox и SendMessage? Мне нужно знать об этом, чтобы определить, должны ли какие-либо функции, вызываемые в процедуре Window, быть реентерабельными.
Еще два важных вопроса: 1) DispatchMessage не возвращается, пока не вернется оконная процедура? 2) Будет ли GetMessage больше не вызываться, если текущее DispatchMessage еще не возвращено?
1 ответ
Модальное диалоговое окно запускает свой собственный цикл сообщений внутри, используя очередь сообщений вызывающего потока. Ты звонишь MessageBox()
внутри вашего WM_TIMER
обработчик, поэтому цикл сообщений внутри MessageBox()
получает и отправляет последующие WM_TIMER
сообщения во время работы окна сообщения.