![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цикл выборки сообщений в безоконном приложении
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]Отсюда мораль - сделай окно