Цикл сообщений в программах Windows всегда "зацикливается"?
Прошу прощения, если вопрос слишком прост для опытных программистов. Я только начал изучать основы Windows с Petzold, но у меня был опыт программирования на Mathematica и немного в C и Labview.
То, что я не понимаю о цикле сообщений в окнах, который выглядит реализованным как цикл While, кажется, что в "обычных" программах на C цикл while выполняется до тех пор, пока условие остается истинным, затем программа переходит к следующей инструкции, пока программа заканчивается. Я представляю это как последовательность событий во времени, которая приводит к выполнению и завершению программы, а не та же философия программы Labview, где время и последовательности имеют меньшее значение, и программа может никогда не закончиться, если ее не прервет пользователь.
Насколько я понимаю в Windows, цикл сообщений будет продолжаться вечно, пока вы не прервете программу. Почти ведет себя как бесконечный цикл, всегда активный. Если условие истина / ложь в цикле сообщений изменяется, заданное логическим результатом GetMessage, то как получится, когда вы получите ложь, программа просто не заканчивается прямо там?
В программах Labview отсутствует четкое представление о времени или последовательности операций, любое условие может измениться в любой данный момент, например, условие истина / ложь цикла While, и тогда цикл начнет выполнять блок кода или остановится без этого подразумевается, что программа как-то ближе к своему концу. Так ли это работает в Windows?
Все, что я говорю, это то, что с программой, которая выглядит так:
WinMain()
{....
while(condition)
{execute code}
....}
Я бы подумал, что он просто выполнил бы блок кода и закончился бы тут же. Но в Windows он продолжает "ждать", пока условие будет выполнено, чтобы выполнить код. Я считаю, что я не понимаю это правильно, поэтому я прошу кого-нибудь прояснить этот механизм для меня.
1 ответ
Действия происходят в цикле Windows в зависимости от условия. Обычно это условие связано с тем, что объект окна (кнопка, флажок, переключатель, выбор в списке и т. Д.) Отправляет сообщение из-за возникшего условия. В случае кнопки кнопка была нажата; в случае списка что-то было введено или выбрано.
Вам необходим цикл Windows, в котором есть оператор case, содержащий как тип события, так и идентификатор объекта окна, который сгенерировал событие.
Без более подробного кода, трудно помочь вам в этом. Исходя из моих древних знаний о Windows, есть основной цикл Windows, который продолжает ждать возникновения событий, а затем обрабатывает код на основе этих событий. Обработка программы выхода также будет одним из таких условий.
Условие "программа stpp" будет поймано, и написанный код выйдет из цикла обработки главного окна. Это позволило бы программе выйти.