Форум: "Основная";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизОбработка сообщений в сервисе Найти похожие ветки
← →
NX (2007-11-14 18:54) [0]Обработка сообщений в сервисе.
Допустим есть оконное приложение не сервис его обработчик сообщений такой:procedure GetMyMessage(var Msg:TMessage);message WM_USER+1;
А как сделать обработчик сообщений в сервисе, т.е. сервис должен обрабатывать в сообщения до того как хоть какой-нибудь пользователь войдет в систему?
← →
фыв (2007-11-14 21:23) [1]если я правильно понял вопрос,
ты спрашивал будет ли служба работать если ни один из пользователей не залогинился?
ответ да, так как службы запускаются "от имени" системы
← →
Anatoly Podgoretsky © (2007-11-14 21:26) [2]> фыв (14.11.2007 21:23:01) [1]
Неверно в принципе
← →
фыв (2007-11-14 21:46) [3]по чему? сервисы запускаются от имени пользователя ?
← →
NX (2007-11-14 21:47) [4]
> фыв (14.11.07 21:46) [3]
> по чему? сервисы запускаются от имени пользователя ?
Я не это спрашивал.
← →
фыв (2007-11-14 21:50) [5]тогда поставь вопрос более точно, так как фраза
"А как сделать обработчик сообщений в сервисе, т.е. сервис должен обрабатывать в сообщения до того как хоть какой-нибудь пользователь войдет в систему?" трудна для поминания
← →
NX (2007-11-14 21:53) [6]WM_USER+1; параметр для пользовательских сообщений, но так как ни оди пользователь не вошел в систему, то инет сообщений или возможно просто не будет обрабатываться это мое мнение, но не уверен. Нужен другой способ которого я незнаю.
← →
Anatoly Podgoretsky © (2007-11-14 21:57) [7]> фыв (14.11.2007 21:46:03) [3]
Потому
← →
фыв (2007-11-14 21:59) [8]из msdn:там не сказано, что что его нельзя использовать, если юзер не залогинился..
WM_USER Notification
--------------------------------------------------------------------------------
The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.
Syntax
#define WM_USER 0x0400
Return Value
No return value.
Remarks
The following are the ranges of message numbers.
Range Meaning
0 through WM_USER–1 Messages reserved for use by the system.
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by the system.
Message numbers in the first range (0 through WM_USER–1) are defined by the system. Values in this range that are not explicitly defined are reserved by the system.
Message numbers in the second range (WM_USER through 0x7FFF) can be defined and used by an application to send messages within a private window class. These values cannot be used to define messages that are meaningful throughout an application, because some predefined window classes already define values in this range. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use these values. Messages in this range should not be sent to other applications unless the applications have been designed to exchange messages and to attach the same meaning to the message numbers.
Message numbers in the third range (0x8000 through 0xBFFF) are available for application to use as private messages. Message in this range do not conflict with system messages.
Message numbers in the fourth range (0xC000 through 0xFFFF) are defined at run time when an application calls the RegisterWindowMessage function to retrieve a message number for a string. All applications that register the same string can use the associated message number for exchanging messages. The actual message number, however, is not a constant and cannot be assumed to be the same between different sessions.
Message numbers in the fifth range (greater than 0xFFFF) are reserved by the system.
Notification Requirements
Minimum DLL Version None
Header Declared in Winuser.h, include Windows.h
Minimum operating systems Windows 95, Windows NT 3.1
See Also
← →
фыв (2007-11-14 22:01) [9]ув. Ан. Подгорецкий не могли могли бы вы суть вопроса..
← →
NX (2007-11-14 22:05) [10]В с++ видел пример реализации через message map нет примера сейчас показать, будет ли работать?
← →
Anatoly Podgoretsky © (2007-11-14 22:09) [11]Это был ответ на это
> так как службы запускаются "от имени" системы
Что в принципе неверно.
← →
фыв (2007-11-14 22:10) [12]самый простой способ узнать запустить пример, отпишись как будет результат
← →
NX (2007-11-14 22:13) [13]
> фыв (14.11.07 21:59) [8]
я просто не помню результат как то сталкавался с этим, вот теперь снова столкнулся, кажется ничего не возвращает, но стоит проверить.
← →
фыв (2007-11-14 22:14) [14]
> Это был ответ на это
>
> > так как службы запускаются "от имени" системы
>
> Что в принципе неверно.
я не точно выразился, вернее неверно, слубы запускаются от имени пользователя "SYSEM"
← →
фыв (2007-11-14 22:15) [15]*"SYSTEM"
← →
Anatoly Podgoretsky © (2007-11-14 22:16) [16]> фыв (14.11.2007 22:14:14) [14]
Опять неверно
← →
фыв (2007-11-14 22:17) [17]
> > фыв (14.11.2007 22:14:14) [14]
>
> Опять неверно
> <Цитата>
ждем объяснения или ссылку..
← →
Anatoly Podgoretsky © (2007-11-14 22:18) [18]> фыв (14.11.2007 22:17:17) [17]
Ты не понимаешь как работает Виндоус.
← →
NX (2007-11-14 22:24) [19]
> фыв (14.11.07 22:10) [12]
> самый простой способ узнать запустить пример, отпишись как
> будет результат
Только завтра после полудня.
← →
фыв (2007-11-14 22:29) [20]
> > фыв (14.11.2007 22:17:17) [17]
>
> Ты не понимаешь как работает Виндоус.
> <Цитата>
я согласен, мои познания далеки от совершеннства.
жалко что вы не захотели ответить на вопрос, с вашим опытом и знанием он не представляет большой сложности
← →
palva © (2007-11-14 23:26) [21]> NX (14.11.07 18:54)
Вопрос не очень понятен. Что такое обработчик сообщения? Функция обработки сообщений окна выглядит по-другому. Но это даже не важно. Если вы напишете в службе обработку сообщений, то она естественно будет работать, если такие сообщения поступят. Что значит до того, как пользователь войдет в систему? Служба может работать от имени какого-то пользователя. Значит ли это, что пользователь вошел в систему?
← →
palva © (2007-11-14 23:28) [22]
фыв (14.11.07 22:29) [20]
> жалко что вы не захотели ответить на вопрос...
В этой ветке отвечают на вопрос автора. Все остальное оффтопик.
← →
Германн © (2007-11-15 01:43) [23]
> В этой ветке отвечают на вопрос автора. Все остальное оффтопик.
Уточню. В любой ветке следует отвечать только на вопрос автора.
← →
Сергей М. © (2007-11-15 10:43) [24]
> сервис должен обрабатывать в сообщения
Кто отправитель сообщений ?
Кто адресат сообщений ?
← →
NX (2007-11-15 10:58) [25]
> Сергей М. © (15.11.07 10:43) [24]
> > сервис должен обрабатывать в сообщенияКто отправитель
> сообщений ?Кто адресат сообщений ?
Отправитель дочерний поток этого сервиса получатель сам сервис.
← →
NX (2007-11-15 11:06) [26]
> то значит до того, как пользователь войдет в систему? Служба
> может работать от имени какого-то пользователя. Значит ли
> это, что пользователь вошел в систему?
Пытаюсь использовать в сервисе WM_USER+1, Мое предпооложение: Так как пользователь не вошел в систему, то незагружен его профиль и т.п. я предположил, что WM_USER+1 на этом этапе просто може не существовать.
← →
Anatoly Podgoretsky © (2007-11-15 11:09) [27]> NX (15.11.2007 10:58:25) [25]
В этом случае сообщения не являются обязательными, поток может общаться с главным потоком через синхронизацию. А для того чтобы посылать оконные сообщения, нужно окно у сервиса и цикл выборки сообщений, что как бы не очень для сервиса. Обычно используют другие средства, не сообщения.
← →
Anatoly Podgoretsky © (2007-11-15 11:23) [28]NX (15.11.07 11:06) [26]
Так у тебя есть в сервере приемник сообщений со своей очередью выборки?
А насчет пользователей не волнуйся, он есть, без аутентификации сервис нельзя запустить и пользователь этот может быть любой, про System не слушай, это любой пользователь, хоть гость.
← →
sniknik © (2007-11-15 11:31) [29]> нужно окно у сервиса и цикл выборки сообщений
а окно зачем? прям в цикле выборки сообщений и обрабатывать, а посылать PostThreadMes.... должно получиться, т.к. сервис это сам по себе поток... проверить надо. т.к. -
вот так чтобы непосредственно сервису посылать, не приходилось. а между дочерними потоками с успехом пользуюсь. но вообще, если бы нужда возникла, лучше бы действительно использовал синхронизацию, ибо проще.
← →
NX (2007-11-15 11:32) [30]
> Anatoly Podgoretsky © (15.11.07 11:09) [27]
> > NX (15.11.2007 10:58:25) [25]В этом случае сообщения
> не являются обязательными, поток может общаться с главным
> потоком через синхронизацию. А для того чтобы посылать оконные
> сообщения, нужно окно у сервиса и цикл выборки сообщений,
> что как бы не очень для сервиса. Обычно используют другие
> средства, не сообщения.
от идеи обрабатывать сообщения в сервисе уже отказался, но "поток может общаться с главным потоком через синхронизацию" - этот вариан мне не подходит, так как придется использовать критические секции и будет блокироваться нужный поток, который не хотелось бы приостанавливать. Предпочел передать обработку данных из потока через PostMessage главному приложению без торможение нужного потока. Тоже выход?
← →
Anatoly Podgoretsky © (2007-11-15 11:58) [31]Обрати внимание на [29], на PostThreadMessage это более подходящий метод, окно не требуется.
← →
Сергей М. © (2007-11-15 12:31) [32]
> получатель сам сервис.
Получателем может быть поток или окно.
← →
palva © (2007-11-15 15:11) [33]> предположил, что WM_USER+1 на этом этапе просто може не существовать
Теперь понял ваши сомнения. Наверно вы уже догадались, что WM_USER это просто константа и с наличием каких-то пользователей никак не связана.
← →
y-soft © (2007-11-15 22:30) [34]PostThreadMessage будет работать только в случае, если принимающий сообщение поток реализует средства для приема сообщений (например цикл PeekMessage/DispatchMessage)
А вообще прием иногда очень полезный, даже при использовании внутри одного потока, когда нужно избежать рекурсии или, например, вызвать деструктор объекта из его собственного обработчика события...
Кстати - очередь сообщений это по сути тоже объект синхронизации...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.129 c