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

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

Обработка сообщений в сервисе


Страницы:   1 2

NX ©   (2007-11-14 18:54:00) 

Обработка сообщений в сервисе.
Допустим есть оконное приложение не сервис его обработчик сообщений такой:
procedure GetMyMessage(var Msg:TMessage);message WM_USER+1;
А как сделать обработчик сообщений в сервисе, т.е. сервис должен обрабатывать в сообщения  до того как хоть какой-нибудь пользователь войдет в систему?


y-soft   (2007-11-15 22:30:00) [1]

PostThreadMessage будет работать только в случае, если принимающий сообщение поток реализует средства для приема сообщений (например цикл PeekMessage/DispatchMessage)

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

Кстати - очередь сообщений это по сути тоже объект синхронизации...


palva   (2007-11-15 15:11:00) [2]

> предположил, что WM_USER+1 на этом этапе просто може не существовать
Теперь понял ваши сомнения. Наверно вы уже догадались, что WM_USER это просто константа и с наличием каких-то пользователей никак не связана.


Сергей М.   (2007-11-15 12:31:00) [3]


> получатель  сам сервис.


Получателем может быть поток или окно.


Anatoly Podgoretsky   (2007-11-15 11:58:00) [4]

Обрати внимание на [29], на PostThreadMessage это более подходящий метод, окно не требуется.


NX   (2007-11-15 11:32:00) [5]


> Anatoly Podgoretsky ©   (15.11.07 11:09) [27]
> > NX  (15.11.2007 10:58:25)  [25]В этом случае сообщения
> не являются обязательными, поток может общаться с главным
> потоком через синхронизацию. А для того чтобы посылать оконные
> сообщения, нужно окно у сервиса и цикл выборки сообщений,
>  что как бы не очень для сервиса. Обычно используют другие
> средства, не сообщения.


от идеи обрабатывать сообщения в сервисе уже отказался, но "поток может общаться с главным потоком через синхронизацию" - этот вариан мне не подходит, так как придется использовать критические секции и будет блокироваться нужный поток, который не хотелось бы приостанавливать. Предпочел передать обработку данных из потока через PostMessage главному приложению без торможение нужного потока. Тоже выход?


sniknik   (2007-11-15 11:31:00) [6]

> нужно окно у сервиса и цикл выборки сообщений
а окно зачем? прям в цикле выборки сообщений и обрабатывать, а посылать Post ThreadMes.... должно получиться, т.к. сервис это сам по себе поток... проверить надо. т.к. -
вот так чтобы непосредственно сервису посылать, не приходилось. а между дочерними потоками с успехом пользуюсь. но вообще, если бы нужда возникла, лучше бы действительно использовал синхронизацию, ибо проще.


Anatoly Podgoretsky   (2007-11-15 11:23:00) [7]

NX   (15.11.07 11:06) [26]
Так у тебя есть в сервере приемник сообщений со своей очередью выборки?
А насчет пользователей не волнуйся, он есть, без аутентификации сервис нельзя запустить и пользователь этот может быть любой, про System не слушай, это любой пользователь, хоть гость.


Anatoly Podgoretsky   (2007-11-15 11:09:00) [8]

> NX  (15.11.2007 10:58:25)  [25]

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


NX   (2007-11-15 11:06:00) [9]


> то значит до того, как пользователь войдет в систему? Служба
> может работать от имени какого-то пользователя. Значит ли
> это, что пользователь вошел в систему?


Пытаюсь использовать в сервисе WM_USER+1, Мое предпооложение: Так как пользователь не вошел в систему, то незагружен его профиль и т.п. я предположил, что WM_USER+1 на этом этапе просто може не существовать.


NX   (2007-11-15 10:58:00) [10]


> Сергей М. ©   (15.11.07 10:43) [24]
> > сервис должен обрабатывать в сообщенияКто отправитель
> сообщений ?Кто адресат сообщений ?


Отправитель дочерний поток этого сервиса получатель  сам сервис.


Сергей М.   (2007-11-15 10:43:00) [11]


> сервис должен обрабатывать в сообщения


Кто отправитель сообщений ?
Кто адресат сообщений ?


Германн   (2007-11-15 01:43:00) [12]


> В этой ветке отвечают на вопрос автора. Все остальное оффтопик.

Уточню. В любойветке следует отвечать только на вопрос автора.


palva   (2007-11-14 23:28:00) [13]


фыв   (14.11.07 22:29) [20]
> жалко что вы не захотели ответить на вопрос...

В этой ветке отвечают на вопрос автора. Все остальное оффтопик.


palva   (2007-11-14 23:26:00) [14]

> NX   (14.11.07 18:54)
Вопрос не очень понятен. Что такое обработчик сообщения? Функция обработки сообщений окна выглядит по-другому. Но это даже не важно. Если вы напишете в службе обработку сообщений, то она естественно будет работать, если такие сообщения поступят. Что значит до того, как пользователь войдет в систему? Служба может работать от имени какого-то пользователя. Значит ли это, что пользователь вошел в систему?


фыв   (2007-11-14 22:29:00) [15]


> > фыв  (14.11.2007 22:17:17)  [17]
>
> Ты не понимаешь как работает Виндоус.
> <Цитата>

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


NX   (2007-11-14 22:24:00) [16]


> фыв   (14.11.07 22:10) [12]
> самый простой способ узнать запустить пример, отпишись как
> будет результат



Только завтра после полудня.


Anatoly Podgoretsky   (2007-11-14 22:18:00) [17]

> фыв  (14.11.2007 22:17:17)  [17]

Ты не понимаешь как работает Виндоус.


фыв   (2007-11-14 22:17:00) [18]


> > фыв  (14.11.2007 22:14:14)  [14]
>
> Опять неверно
> <Цитата>


ждем объяснения или ссылку..


Anatoly Podgoretsky   (2007-11-14 22:16:00) [19]

> фыв  (14.11.2007 22:14:14)  [14]

Опять неверно


фыв   (2007-11-14 22:15:00) [20]

*"SYSTEM"


Страницы:   1 2

Наверх

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