Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.05;
Скачать: CL | DM;

Вниз

Обмен данными между процессами.   Найти похожие ветки 

 
Strate   (2009-02-16 12:23) [0]

Приветствую. Пишу программку, одна часть которой будет работать как сервис, а вторая - как оболочка пользователя. Причём основная функция оболочки - отображать некие данные, полученные из сервиса, а побочная - подавать некие команды сервису на выполнение, и получать результат выполнения этих команд. С получением данных выкрутился с помощью Memory Mapped Files, а вот с вызовом удалённых процедур никак не могу придумать. Самоу умное что приходит в голову - в сервисе запускать "ждущий" Thread, который будет ждать пока некий флаг не изменит своё состояние. Сменить флаг можно и из клиента. Но решение мне лично кажется немного кривым. Можно было бы выкрутиться с помощью стандартных Windows-сообщений, но сервис не имеет окон, да и не желательно из использовать, если запуск будет в виде службы Windows. Кто что может посоветовать, какие технологии использовать?

Спасибо большое заранее.


 
Сергей М. ©   (2009-02-16 12:28) [1]

Для простых команда с одним параметром вполне подойдет PostThreadMessage


 
KSergey ©   (2009-02-16 12:41) [2]

можно сервис сделать СОМ-сервером, можно DDE сервером, можно открыть в нем слушать TCP/IP или pipe....

> Сергей М. ©   (16.02.09 12:28) [1]
> Для простых команда с одним параметром вполне подойдет PostThreadMessage

WM_COPY вроде ж тоже пройдет?


 
clickmaker ©   (2009-02-16 12:42) [3]

> но сервис не имеет окон

окна не обязательны. Достаточно создать очередь сообщений и получать их в цикле - PeekMessage или GetMessage

самый удобный способ в плане программирования - DCOM. Поскольку там передача и получение данных сводится к простому вызову методов.
Но для этого сервис должен быть зарегистрирован как COM-сервер, а клиент импортировать его tlb


 
Strate   (2009-02-16 12:43) [4]


> Для простых команда с одним параметром вполне подойдет PostThreadMessage


Отлично, спасибо, попробую =)

А как быть в более сложным вариантом?


 
Сергей М. ©   (2009-02-16 12:44) [5]


> KSergey ©   (16.02.09 12:41) [2]


> WM_COPY вроде ж тоже пройдет?


Что значит "пройдет" ?


 
Сергей М. ©   (2009-02-16 12:46) [6]


> Strate   (16.02.09 12:43) [4]


> как быть в более сложным вариантом?


Смотря насколько он "сложен".


 
KSergey ©   (2009-02-16 12:48) [7]

> Сергей М. ©   (16.02.09 12:44) [5]
> > WM_COPY вроде ж тоже пройдет?
> Что значит "пройдет" ?

Для засылки в PostThreadMessage, не вру?


 
Сергей М. ©   (2009-02-16 12:52) [8]


> KSergey ©   (16.02.09 12:48) [7]


Смотря кем и кому оно посылается


 
KSergey ©   (2009-02-16 12:56) [9]

> Сергей М. ©   (16.02.09 12:52) [8]
> Смотря кем и кому оно посылается

Т.е.?! не понял в чем разница.
Окей, пусть будет клиентским приложением сервису.
А если наоборот? я что-то не улавливаю разницу.


 
clickmaker ©   (2009-02-16 12:59) [10]

> [7] KSergey ©   (16.02.09 12:48)

WM_COPYDATA?
насколько я знаю, нет. Оно только для синхронной отправки


 
Сергей М. ©   (2009-02-16 13:01) [11]

Для сервис-приложений, использующих дельфийский "шаблон", треды TServiceThread ожидают сообщение CM_SERVICE_CONTROL_CODE

Цитата:

{ TServiceThread }

const

 CM_SERVICE_CONTROL_CODE = WM_USER + 1;

Прочие сообщения попросту игнорируются.


 
clickmaker ©   (2009-02-16 13:03) [12]

ксати, можно и фиктивное окно создать
AllocateHWnd()
тогда можно и SendMessage( WM_COPYDATA использовать


 
Сергей М. ©   (2009-02-16 13:08) [13]


> clickmaker ©   (16.02.09 13:03) [12]


Тогда снрвис становится зависимым от опции взаимодействия с раб.столом


 
KSergey ©   (2009-02-16 13:27) [14]

> clickmaker ©   (16.02.09 12:59) [10]
> WM_COPYDATA?

Да, именно так.

> насколько я знаю, нет. Оно только для синхронной отправки

Ваапще, конечно, да, я уже после ка кнаписал задумался о том, что речь про PostThreadMessage.
Впрочем, если понадеяться на счастье и передать указатель на глобальную структуру... :)
(не, это глпуость, конечно)


 
Вариант   (2009-02-16 14:07) [15]


>  Обмен данными между процессами.
>
> Strate   (16.02.09 12:23)  


> Приветствую. Пишу программку, одна часть которой будет работать
> как сервис, а вторая - как оболочка пользователя.


Я так понимаю это разные процессы - сервис и оболочка пользователя?
В этом случае мое мнение (ИМХО):

Варианты с посылкой сообщения (PostThreadMessage или SendMessage) от оконного приложения к сервису и от сервиса к приложению мне кажутся неудачными. Причина - отчасти в [13], второе поведение на различных ОС Windows может требовать доп. условий, зависящих от платформы - подробнее на эту тему смотри в MSDN например о PostThreadMessage.  Более универсальные варианты на мой взгляд (и лучшие опять таки на мой взгляд) предложены в [2] (pipe и TCP/IP). Хотя если речь идет об одном флаге и работе программ на одной машине, то вполне можно было бы использовать и например именованное событие - смотри CreateEvent (обратим внимание на правила именования) или мьютекс.


 
Медвежонок Пятачок ©   (2009-02-16 14:14) [16]

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


 
KSergey ©   (2009-02-16 14:45) [17]

> Медвежонок Пятачок ©   (16.02.09 14:14) [16]

Гнать таких сотрудников. И админов за одно.


 
Медвежонок Пятачок ©   (2009-02-16 14:52) [18]

каких?


 
Медвежонок Пятачок ©   (2009-02-16 14:52) [19]

которые по tcp:80 разрешают выходить с рабочего места наружу?


 
KSergey ©   (2009-02-16 16:33) [20]

> Медвежонок Пятачок ©   (16.02.09 14:52) [19]
> которые по tcp:80 разрешают выходить с рабочего места наружу?

Да! :)



Страницы: 1 вся ветка

Текущий архив: 2009.04.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
1-1209392487
ZENsan
2008-04-28 18:21
2009.04.05
DesignIntf, DesignEditors...


15-1233679373
@!!ex
2009-02-03 19:42
2009.04.05
Американское Шоу(American Show)


15-1233273959
Дмитрий Белькевич
2009-01-30 03:05
2009.04.05
Куда высылать изменения в JCL/JVCL?


4-1208076075
Dr.Andrew
2008-04-13 12:41
2009.04.05
Как задать шрифт и диапазон его символов в charmap.exe?


2-1234776233
Strate
2009-02-16 12:23
2009.04.05
Обмен данными между процессами.