Не подскажете ли имеется ли какие-нибудь стандартные очереди сообщений в виндовс, аналогичные тем, что используются в Unix, т.е. с возможностью пересылки каких-либо данных?
Мне нужно для системного сервиса, поэтому использование SendMessage с типом сообщения WM_COPYDATA не подходит. Использование очередей типа MSMQ не разумно для моего проекта.
Заранее спасибо!
Здравствуйте, piv-pro, Вы писали:
PP>Не подскажете ли имеется ли какие-нибудь стандартные очереди сообщений в виндовс, аналогичные тем, что используются в Unix, т.е. с возможностью пересылки каких-либо данных?
PP>Мне нужно для системного сервиса, поэтому использование SendMessage с типом сообщения WM_COPYDATA не подходит. Использование очередей типа MSMQ не разумно для моего проекта.
PP>Заранее спасибо!
ВыберайтеАвтор(ы): Алекс Jenter
Дата: 10.03.2001
Обзор основных технологий IPC: Очень многим приложениям, если не большей части, требуется
информация от других приложений, либо они должны эту информацию сообщать.
Именно поэтому в операционную систему встраивается множество механизмов,
которые обеспечивают т.н. Interproccess Communication (IPC) — то есть
межпроцессное взаимодействие...
если не ошибаюсь, никто не мешает создать невидимое окно (даже сервису), и заниматься пересылкой через него
Здравствуйте, x64, Вы писали:
DTB>>если не ошибаюсь, никто не мешает создать невидимое окно (даже сервису), и заниматься пересылкой через него
x64>Насколько мне известно, окна принадлежат какому-либо конкретному рабочему столу (и конкретному сеансу). Соответственно, если служба не интерактивная (а в Vista оно всегда так), то такой подход работать не будет.
Позволю себе немного расширить Ваш ответ, если не возражаете
Все окна и потоки привязаны к Desktop'y, каждый Desktop принадлежит Window station, и у каждой терминальной сессии свой набор Window Stations. Поток не может послать сообщение (любое) окну, привязанному к другому десктопу даже в пределах одной оконной станции. Но, насколько помню, поток может послать сообщение другому потоку, даже если эти два потока привязаны к разным столам в разных станциях. Возможно ли это проделать между потоками в разных терминальных сессиях, не знаю, но очень сомневаюсь. Хотя как-нибудь надо-бы проверить, я экспериментировал ещё на W2k без terminal service, и больше к этому не возвращался.
Но в любом случае, WM_COPYDATA можно отправлять только синхронно, то есть только окну, PostThreadMessage не годится.
В принципе, в системе без Terminal Service сервис мог бы сделать один из своих потоков "интерактивным", подключив его к интерактивному столу, но Terminal Service переводят его в разряд экзотитки, не говоря уж о проблемах безопасности.