Для WM_PAINT
оконный код в DefWndProc
просто устанавливает флаг, а затем проверяет этот флаг, только если очередь пуста при следующем вызове GetMessage
. Некоторые сообщения мыши также объединяются (более старые удаляются, когда приходят новые).
Реальный ответ зависит от поведения, которого вы на самом деле хотите достичь.
Если вы пытаетесь избежать повторного входа, просто установите флажок для быстрого выхода, например:
////bool processing = false; // class/window instance variable
...
void HandleCustomMessage()
{
////if (processing)
////{
//// return;
////}
////processing = true;
DoSomething();
////processing = false;
}
Если вам нужна реальная очередь с приоритетом, существует множество реализаций PQ. Добавьте элемент данных в PQ, а затем опубликуйте собственное сообщение (всегда с одним и тем же идентификатором). Затем настраиваемый обработчик сообщений запрашивает у PQ элемент с наивысшим приоритетом.
Другой вариант — перехватить цикл
GetMessage
, использовать вызов
PeekMessage
, чтобы узнать, не нужно ли что-то сделать, затем вызвать
GetMessage
, если сообщение доступно, или проверить свой PQ в противном случае. При таком подходе вам не нужно специальное сообщение.
person
devstuff
schedule
25.11.2009