Очереди сообщений
От: piv-pro Россия  
Дата: 01.07.09 09:23
Оценка:
Не подскажете ли имеется ли какие-нибудь стандартные очереди сообщений в виндовс, аналогичные тем, что используются в Unix, т.е. с возможностью пересылки каких-либо данных?

Мне нужно для системного сервиса, поэтому использование SendMessage с типом сообщения WM_COPYDATA не подходит. Использование очередей типа MSMQ не разумно для моего проекта.

Заранее спасибо!
очереди сообщений
Re: Очереди сообщений
От: DTB Россия  
Дата: 01.07.09 09:41
Оценка:
Здравствуйте, piv-pro, Вы писали:

PP>Не подскажете ли имеется ли какие-нибудь стандартные очереди сообщений в виндовс, аналогичные тем, что используются в Unix, т.е. с возможностью пересылки каких-либо данных?


PP>Мне нужно для системного сервиса, поэтому использование SendMessage с типом сообщения WM_COPYDATA не подходит. Использование очередей типа MSMQ не разумно для моего проекта.


PP>Заранее спасибо!


Выберайте
Автор(ы): Алекс Jenter
Дата: 10.03.2001
Обзор основных технологий IPC: Очень многим приложениям, если не большей части, требуется
информация от других приложений, либо они должны эту информацию сообщать.
Именно поэтому в операционную систему встраивается множество механизмов,
которые обеспечивают т.н. Interproccess Communication (IPC) — то есть
межпроцессное взаимодействие...


если не ошибаюсь, никто не мешает создать невидимое окно (даже сервису), и заниматься пересылкой через него
Have fun...
Re[2]: Очереди сообщений
От: x64 Россия  
Дата: 01.07.09 09:48
Оценка:
DTB>если не ошибаюсь, никто не мешает создать невидимое окно (даже сервису), и заниматься пересылкой через него

Насколько мне известно, окна принадлежат какому-либо конкретному рабочему столу (и конкретному сеансу). Соответственно, если служба не интерактивная (а в Vista оно всегда так), то такой подход работать не будет.
Re[3]: Очереди сообщений
От: Аноним  
Дата: 01.07.09 10:27
Оценка:
Здравствуйте, x64, Вы писали:

DTB>>если не ошибаюсь, никто не мешает создать невидимое окно (даже сервису), и заниматься пересылкой через него


x64>Насколько мне известно, окна принадлежат какому-либо конкретному рабочему столу (и конкретному сеансу). Соответственно, если служба не интерактивная (а в Vista оно всегда так), то такой подход работать не будет.


Позволю себе немного расширить Ваш ответ, если не возражаете

Все окна и потоки привязаны к Desktop'y, каждый Desktop принадлежит Window station, и у каждой терминальной сессии свой набор Window Stations. Поток не может послать сообщение (любое) окну, привязанному к другому десктопу даже в пределах одной оконной станции. Но, насколько помню, поток может послать сообщение другому потоку, даже если эти два потока привязаны к разным столам в разных станциях. Возможно ли это проделать между потоками в разных терминальных сессиях, не знаю, но очень сомневаюсь. Хотя как-нибудь надо-бы проверить, я экспериментировал ещё на W2k без terminal service, и больше к этому не возвращался.

Но в любом случае, WM_COPYDATA можно отправлять только синхронно, то есть только окну, PostThreadMessage не годится.

В принципе, в системе без Terminal Service сервис мог бы сделать один из своих потоков "интерактивным", подключив его к интерактивному столу, но Terminal Service переводят его в разряд экзотитки, не говоря уж о проблемах безопасности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.