Как желательный не имеет цикла сообщения в WinMain?

Это мой ответ: Este Ejemplo SQL Indica la cantidad de un Grupo y Suma los encontrado con S y N por sedodo. Это значит, что у вас есть все, что вам нужно. Бендито море Израиль.

SELECT sm_med_t_servicios.id as identidad, count(sm_adm_t_admision.id) as cantidad , 
SUM(IF(sm_adm_t_admision.atendido = 'S', 1, 0)) AS atendidos,
SUM(IF(sm_adm_t_admision.atendido = 'N', 1, 0)) AS por_ver

FROM sm_med_t_servicios 
LEFT JOIN sm_adm_t_admision ON sm_med_t_servicios.id = sm_adm_t_admision.sm_med_t_servicios_id
WHERE sm_med_t_servicios.m_empresas_id = '2'
GROUP BY sm_med_t_servicios.id

Надеюсь, это поможет вам.

6
задан JustJeff 1 June 2009 в 20:46
поделиться

6 ответов

Просто формальность, но у вас есть окно, и у вас есть цикл сообщений, только не в вашем коде.

Вызов MessageBox () создает окно (класса # 32770) и запускает локальный цикл сообщений, не возвращаясь к вашему коду до тех пор, пока цикл сообщений не выпадет, предположительно при отправке WM_NCDESTROY . Я думаю, что это тот же цикл сообщений, который запускается в ответ на DialogBox () .

Но вы можете заменить свой вызов MessageBox () чем-нибудь еще, что действительно не работает Не создавайте цикла сообщений, и все будет хорошо. Windows не волнует, есть ли у вас цикл сообщений, хотя некоторые функции (в основном связанные с пользовательским интерфейсом) сложно или невозможно использовать без него. Фактически, вам вообще не нужно ссылаться на user32, и некоторые приложения, у которых нет пользовательского интерфейса.

Теперь, если вы создаете окно и не обрабатываете для него сообщения каким-то способом, Windows XP и выше заменит ваше окно на " ghost »с белой клиентской областью и диспетчером задач сообщит пользователю, что приложение не отвечает.

Хотя сначала так кажется, цикл сообщений не является волшебным или строго обязательной частью шаблона Windows. Однако он прочно укоренился в качестве стандарта в большинстве приложений Windows, потому что это лучший способ обработки отправки оконных сообщений. «Управляемая событиями» природа большинства приложений Windows иногда заставляет нас забывать о том, что приложения Windows изначально были спроектированы как однопоточные, и в этой модели это код, выполняющийся в этом единственном потоке, не какая-то невидимая сила в операционной системе, которая должна вызывать каждый вызов функции в нашем коде. Добавление многопоточности несколько изменило это, но базовая модель осталась прежней.

РЕДАКТИРОВАТЬ

Замечание об очередях сообщений:

Как упоминалось в другом месте, очередь сообщений создается только (и по отдельности). основа потока), когда окно создается этим потоком. В вашем примере программы при создании окна сообщения создает очередь сообщений. Но эта очередь не обязательно должна быть пустой, когда ваше приложение завершает работу. Эта очередь - просто структура памяти. Это блок памяти, который может содержать определенное количество объектов сообщения (с указанием получателя hWnd, идентификатора сообщения, wParam, lParam, системного времени, когда сообщение было отправлено, положения мыши, когда сообщение было отправлено, и некоторые данные, которые позволяют получить состояние клавиатуры и кнопки мыши при отправке сообщения), а также указатели на начало и конец очереди (я предполагаю, что это круговая очередь). Когда приложение завершает работу, эта память, как и вся память, принадлежащая процессу, в общем случае освобождается.

Конечно, есть и другие вещи, которые необходимо очистить вне вашего процесса. ОС должна вести таблицу всех существующих окон, например, вместе с потоком и процессом, который их создал. Конечно, все они также очищаются автоматически.

другие вещи, которые необходимо убрать вне вашего процесса. ОС должна вести таблицу всех существующих окон, например, вместе с потоком и процессом, который их создал. Конечно, все они также очищаются автоматически.

другие вещи, которые необходимо убрать вне вашего процесса. ОС должна вести таблицу всех существующих окон, например, вместе с потоком и процессом, который их создал. Конечно, все они также очищаются автоматически.

11
ответ дан 8 December 2019 в 05:57
поделиться

Since you don't have a window, you don't need a message loop. In Win32 the messages are sent to windows, not to applications.

4
ответ дан 8 December 2019 в 05:57
поделиться

Вам не нужно создавать окна. Но все же есть какие-то сообщения, например

  • WM_TIMER
  • WM_TIMECHANGE
  • WM_CLIPBOARDUPDATE
  • WM_COPYDATA
  • WM_POWER

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

2
ответ дан 8 December 2019 в 05:57
поделиться

У вас есть цикл сообщений - MessageBox является модальным диалоговым окном и поэтому содержит цикл сообщений внутри.

3
ответ дан 8 December 2019 в 05:57
поделиться

If you don't have a window, then that is fine, but if you do then you need to make sure that you pump messages for it. Otherwise the system can hang on broadcast messages waiting for you to respond. This is important for things like COM which create hidden windows for message processing. If your main thread does not pump messages (e.g., by calling WaitForSingleObject) then calls to your COM objects will not be processed, and any programs which send broadcasts will appear to hang.

2
ответ дан 8 December 2019 в 05:57
поделиться

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

0
ответ дан 8 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: