Могу ли я использовать свой собственный цикл сообщений в Windows? - PullRequest
4 голосов
/ 03 марта 2011

Я строю программу на C ++ для Windows с использованием Visual Studio.Он опирается на базовый API COM, который отправляет сообщение Windows для уведомления.

Для обработки этих сообщений я вижу две возможности:

  • Создать форму Windows и вызвать на ней doModal, котораядолжен обрабатывать сообщения, но так как я не хочу использовать какой-либо пользовательский интерфейс, это не то, что я хочу сделать
  • сделать свой собственный цикл для обработки сообщений

Я незнать, что лучше, или есть другой способ обработки сообщений (возможно, есть функция windows, которая может запустить цикл)

  while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
  { 
    if (bRet == -1)
    {
      // handle the error and possibly exit
    }
    else
    {
      TranslateMessage(&msg); 
      DispatchMessage(&msg); 
    }
  } 

Ответы [ 2 ]

4 голосов
/ 03 марта 2011

Это не только для вашей выгоды, COM требует , чтобы вы создали цикл обработки сообщений.COM нужен для работы с COM-серверами с многопоточностью, дорогостоящим словом для «компонентов, которые не поддерживают многопоточность».Подавляющее большинство из них этого не делают.

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

4 голосов
/ 03 марта 2011

Да, вы можете. Каждый поток может иметь один цикл сообщений, и вам не нужны окна для получения или отправки сообщений (см. PostThreadMessage).

Нет ничего плохого в использовании этого метода, если ваше приложение управляется событиями.

...