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