Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.005 c
15-1233818205
Slider007
2009-02-05 10:16
2009.04.05
С днем рождения ! 1 февраля 2009 воскресенье


15-1234046172
Student
2009-02-08 01:36
2009.04.05
С чего начать? Или HellowWorld по серьёзному


6-1201972877
..::KraN::..
2008-02-02 20:21
2009.04.05
Documents and Settings - доступ по FTP закрыт...


10-1153589543
Andrey Kad.
2006-07-22 21:32
2009.04.05
Границы ячейки в Excel


4-1207825025
Виталий
2008-04-10 14:57
2009.04.05
Узнать хендлы открытых процессом файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский