Вопрос

Почему заявление PeekMessage требуется до GetMessage () для создания очереди сообщений?

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

Решение

Это не требуется.

Тем не менее, вы иногда видите, является нитью, которая еще не готова к обработке сообщений, но она хочет иметь возможность получать их в очереди сообщений. Новые потоки не имеют письменных очередей сразу, но вызывая PeekMessage достаточно для создания очереди сообщений. Он возвращается сразу, поскольку нет сообщения, и это позволяет потоку продолжать получать себя готовой. Тем временем другие потоки могут начать очередь сообщения для новой темы. Как только новая тема готова, она звонит GetMessage Чтобы либо извлечь первое сообщение с очереди, или ждать, пока сообщение будет установлено в очередь.

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

Это не. Две функции делают разные вещи.

Peekmessage (...) не ждет, пока появится сообщение - он получает первый, если он там, необязательно удаляя его из очереди, но возвращает false сразу нет. Это чаще встречается в приложениях, где вы делаете некоторую обработку во время ожидания сообщений, и не могу просто сидеть там и ждать вечно для следующего сообщения. Игры в реальном времени и такие легко попасть в эту категорию.

GetMessage (...) ждет, пока есть сообщение и получает его. Это более эффективно, потому что это не постоянно избирается, но оно будет пауза, если нет никаких сообщений. Это более распространено в формальных приложениях и других программах, которые не требуют постоянной обработки в реальном времени.

Есть несколько причин использования PeekMessage до / вместо GetMessage:

  1. Обеспечение программы не повесится до прибытия сообщения - это немного избыточно, потому что вы можете напрямую использовать PeekMessage с PM_REMOVE Флаг, чтобы опросить очередь сообщений и оставьте GetMessage Всего.
  2. Используя функцию с PM_NOREMOVE и решение, если вы хотите обрабатывать и / или удалить сообщение из очереди или нет.
  3. Призыв IsWindowUnicode на обратном окне обратно сообщений и выбирая либо PeekMessageA или PeekMessageW.
  4. Множественное из вышеперечисленного.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top