Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Могут ли программы общаться


Автор: Zakhar_Shan 9.7.2009, 18:03
Всем привет.
Есть такая задача. 
Допустим есть две программы, назовем их  first  и second.
first  запущена пользователем, second запущена из first .
Допустим даже что и first  и second знают pid'ы друг друга.
Внимание вопрос:
Может ли second во время работы сообщать что либо для first (ну например процент выполнение задачи)?
Зарание благобладарю  smile 

Автор: mes 9.7.2009, 18:11
Цитата(Zakhar_Shan @  9.7.2009,  17:03 Найти цитируемый пост)
Может ли second во время работы сообщать что либо для first (ну например процент выполнение задачи)?

Может и даже различными способами .. пользуйте поиск и будет вам счастие smile

Автор: Zakhar_Shan 9.7.2009, 18:13
Цитата(mes @  9.7.2009,  18:11 Найти цитируемый пост)
пользуйте поиск и будет вам счастие

Я то 2 часа название для темы подбирал, просто не пойму что в поиске писать 

Автор: ИванМ 9.7.2009, 18:54
Легче всего просто послать пользовательское сообщение с помощью SendMessage.

Автор: xvr 10.7.2009, 12:23
Слова для поиска: IPC, COM, MailBox, Pipe, NamedPipe, SharedMemory, Event и много других

Автор: mrbrooks 10.7.2009, 14:48
можно поискать по предложению "межпроцессное взаимодействие"  smile 

Автор: SerK 13.7.2009, 17:34
Zakhar_Shan!

У меня тоже возникла подобная проблема, т.е. передать данные из одной запущенной программы в другую. Попробывал разные варианты. 
1. Через буфер обмена. Все бы ничего, но если вклинится еще одна программа, которая передает данные через буфер, могут быть сбои.
2. Попробывал с помощью функции SendMessage. Здесь можно передать данные типа long. А если нужно передать строку?
3. Пытался передать с помощью атомов. Но не знаю, как обратиться к глобальному атому, созданному в "первом" приложении, из другого приложения. Может кто знает.
4. Сейчас пробую технологию DDE, то есть одно приложение клиент- посылает данные, второе- клиент, принимает. Это еще на стадии ознакомления. Если что-то получится, опишу. По крайней мере, вы знаете в каком направлении искать.

Автор: ИванМ 13.7.2009, 17:44
SerK, смотри в сторону GlobalAlloc, GlobalAddAtom, GlobalFindAtom.

Автор: SerK 13.7.2009, 17:57
ИванМ

Цитата

смотри в сторону GlobalAlloc, GlobalAddAtom, GlobalFindAtom.


Это я понимаю, не знаю только как сделать практически.

Кстати, нашел одну ссылку по теме, может кому-то поможет.
http://www.mgtu-lekcii.ru/iu/iu7/3/winapi/index200.html

Автор: xvr 13.7.2009, 19:16
Не надо пользоваться DDE - КРАЙНЕ устаревшая технология. Нет никакой гарантии, что в ближайшем будущем ее не упразнят совсем.

Автор: vikaz 14.7.2009, 13:22
У Архангельского, в книге для 6 Билдера, есть пример использования COM сервера. Посмотрите, там примитивный и понятный пример, как можно пробросить в программу, все что угодно! smile

Автор: hente 15.7.2009, 06:57
А почему никто не предложил разделяемую память?
Очень удобно!!!

Ну а в качестве синхронизации например симофорыsmile)

Автор: mrbrooks 15.7.2009, 07:38
Цитата(hente @  15.7.2009,  06:57 Найти цитируемый пост)
А почему никто не предложил разделяемую память?

а ты внимательно почитал предыдущие посты - прежде чем обличать нас в невежестве?  smile 

Автор: SerK 29.7.2009, 11:31
Zakhar_Shan!

Нашел ответ на ваш вопрос. Даю ссылку.
http://www.dudarik.wallst.ru/dudarikfiles/php/htm_temples/atom.php

Автор: jonie 29.7.2009, 18:13
Цитата

2. Попробывал с помощью функции SendMessage. Здесь можно передать данные типа long. А если нужно передать строку?

WM_COPYDATA например?

Автор: SerK 29.7.2009, 19:52
jonie
Ну нет времени, перепысывать, зайдите на сайт, изучите внимательно код. 
Все передеется и строка , в том числе.
Еще раз даю ссылку.
http://www.dudarik.wallst.ru/dudarikfiles/php/htm_temples/atom.php

Автор: dumb 30.7.2009, 03:43
Цитата(SerK @  29.7.2009,  20:52 Найти цитируемый пост)
jonie
Ну нет времени, перепысывать, зайдите на сайт, изучите внимательно код.

jonie то это зачем? - он просто подсказал, как передать строку, используя SendMessage.

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

Цитата(msdn)
Global atoms are not deleted automatically when the application terminates. For every call to the GlobalAddAtom function, there must be a corresponding call to the GlobalDeleteAtom function.

Автор: SerK 7.8.2009, 14:58
dumb

Объясните, пожалуйста, что значит
Цитата

утечка атомов - на сладкое


Насколько я понял там атом создается, с помощью атома передается строковое значение другой программе (имена удленных файлов),
а при закрытии программы атом удаляется с помощью GlobalDeleteAtom. Где здесь утечка атомов?.

Автор: SerK 11.8.2009, 09:37
dumb

Я понял вас. Нужно создавать и удалять атом сразу же после применения.

Автор: Zakhar_Shan 14.9.2009, 09:55
Спасибо за помощь, жаль постов мало, не могу рейтинги поднимать. Поэтому просто большое спасибо!!!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)