Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Цикл выборки сообщений в безоконном приложении


Aldor_ ©   (2004-07-11 12:35:00) 

Если у меня безоконное приложение, то надо ли в цикле выборки сообщений (while GetMessage(WinMessage, 0, 0, 0) do) писать TranslateMessage и DispatchMessage, ведь вроде некому диспатчить-то.


Alex Konshin   (2004-07-12 11:12:00) [1]

Piter ©   (11.07.04 16:47) [6]
Ты заблуждаешься. Для приема сообщений необязательно наличия окна. Дело в том, что сообщение можно послать нити, и неважно, есть ли окно, связанное с ней или нет.
К вопросу о том, зачем это может быть нужно: посмотри, как работают с Winsock 1.x.


Aldor_   (2004-07-12 11:08:00) [2]

Угу, еще раз сэнкс.


Sha   (2004-07-12 09:42:00) [3]

> Мой вопрос состоял в том, что не шлет ли система каких-либо сообщений треду?

Не шлет.


Aldor_   (2004-07-12 08:18:00) [4]

> Это те сообщения, которые ты успел послать треду до его перехода в цикл выборки сообщений.

 А только ли я? Мой вопрос состоял в том, что не шлет ли система каких-либо сообщений треду?

Sha ©   (12.07.04 07:59) [14], [15]
 Сэнкс за рязъяснения.


Sha   (2004-07-12 08:07:00) [5]

>> DispatchMessage никуда не будет перенаправлять данное сообщение. Вот и все.

> Вот в этом и хотел удостоверится.

Кстати, чтобы DispatchMessage перенаправлял сообщения созданному тобой окну, ты можешь ручками в hwnd приятого сообщения исправить 0 на нужный хэндл. Так удобно делать, если все-таки захочешь создать окно. Вся логика будет в одном месте :)

Для потомка TThread еще можно использовать просто Dispath, чтобы вызывать его методы обработки сообщений.


Sha   (2004-07-12 07:59:00) [6]

> а какие это могут быть сообщения?

Это те сообщения, которые ты успел послать треду до его перехода в цикл выборки сообщений.


Sha   (2004-07-12 07:55:00) [7]

> кстати, разве нет такого понятия, как _очередь_ сообщений?

Для треда это понятие появляется после сделанной им первой попытки выбрать сообщения из очереди :)


Aldor_   (2004-07-12 04:23:00) [8]

> Piter ©   (11.07.04 16:47) [6]
вот и интересно - какие такие функции, а? :)

Периодическая проверка инсталленного софта и его версий, при логоне - проверка устройств. При наличии изменений - сигнализация серверу.

> DispatchMessage никуда не будет перенаправлять данное сообщение. Вот и все.

 Вот в этом и хотел удостоверится. И, елис не секрет, откуда такая инфа (хотя я, конечно, понимаю, что все это тривиально).

Anatoly Podgoretsky ©   (11.07.04 17:09) [7]
> Для того чтобы принимать сообщения

 А разве обязательно для этого окно? Или Вы шутите? :)))))

Sha ©   (11.07.04 22:04) [11]
> Учти, что все сообщения, посланные до первого GetMessage будут потеряны.

 Вот это интересно, а какие это могут быть сообщения? И, кстати, разве нет такого понятия, как _очередь_ сообщений?


Sha   (2004-07-11 22:04:00) [9]

> Если у меня безоконное приложение, то надо ли в цикле выборки
> сообщений (while GetMessage(WinMessage, 0, 0, 0) do) писать
> TranslateMessage и DispatchMessage, ведь вроде некому диспатчить-то.

Нет, не надо. Можешь прямо в цикле обработать сообщения, посланные, например, при помощи PostThreadMessage или от таймера, созданного в контексте потока. Учти, что все сообщения, посланные до первого GetMessage будут потеряны.


jack128   (2004-07-11 19:55:00) [10]


> А как, если не секрет?
PortThreadMessage


Igorek   (2004-07-11 17:53:00) [11]


> Безоконному приложению вообще не будут приходить никакие
> сообщения, если не "попросить" систему об этом.

А как, если не секрет?


jack128   (2004-07-11 17:28:00) [12]


> вот и интересно - какие такие функции, а? :)
FBServer, например..


Anatoly Podgoretsky   (2004-07-11 17:09:00) [13]

Aldor_   (11.07.04 13:22) [2]
Для того чтобы принимать сообщения


Piter   (2004-07-11 16:47:00) [14]

Aldor_   (11.07.04 15:30) [5]
сидит резидентом, выполняет свои функции


вот и интересно - какие такие функции, а? :)


Но мне просто интересно, что будет делать DispatchMessage

Ничего не будет делать. Ты же ему передаешь структуру TMsg, а там прописан Handle окна. В случае Thread Message там будет 0. Соответственно, DispatchMessage никуда не будет перенаправлять данное сообщение. Вот и все.


могут ли вообще приходить клавиатурные сообщения безоконному приложению в обычных случаях

не могут. Безоконному приложению вообще не будут приходить никакие сообщения, если не "попросить" систему об этом.


Aldor_   (2004-07-11 15:30:00) [15]

Piter ©

 ИМХО, безоконные приложения вполне обычны - сидит резидентом, выполняет свои функции, выборка сообщений - ловить WM_TIMER, например.

 Но мне просто интересно, что будет делать DispatchMessage, если ему отдать "ThreadMessage".
 Тоже самое TranslateMessage: могут ли вообще приходить клавиатурные сообщения безоконному приложению в обычных случаях (кроме тех, когда такое сообщение шлется специально).
 Вроде бы ответ очевиден, но включается "а Гейтс его знает", вот и удостоверяюсь.


Piter   (2004-07-11 15:00:00) [16]

Вообще приложении без окна... зачем оно?


Piter   (2004-07-11 14:58:00) [17]

нет, не надо писать.

Да и вообще, если приложение безоконное - то нафига вообще мучиться с выборкой сообщений? :)

Что интересно делает твое безоконное приложение? :)


Aldor_   (2004-07-11 13:22:00) [18]

Anatoly Podgoretsky ©   (11.07.04 13:12) [1]

 А смысл? Серьезно, зачем делать окно, если оно никак не будет использоваться, разве что для того, чтобы было кому диспатчить? :)))))


Anatoly Podgoretsky   (2004-07-11 13:12:00) [19]

Отсюда мораль - сделай окно


Наверх

Титульная страница Поиск, карта сайта Написать письмо