Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Могут ли программы общаться |
Автор: Zakhar_Shan 9.7.2009, 18:03 |
Всем привет. Есть такая задача. Допустим есть две программы, назовем их first и second. first запущена пользователем, second запущена из first . Допустим даже что и first и second знают pid'ы друг друга. Внимание вопрос: Может ли second во время работы сообщать что либо для first (ну например процент выполнение задачи)? Зарание благобладарю ![]() |
Автор: Zakhar_Shan 9.7.2009, 18:13 |
Я то 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 |
можно поискать по предложению "межпроцессное взаимодействие" ![]() |
Автор: 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 | ||
ИванМ
Это я понимаю, не знаю только как сделать практически. Кстати, нашел одну ссылку по теме, может кому-то поможет. 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 сервера. Посмотрите, там примитивный и понятный пример, как можно пробросить в программу, все что угодно! ![]() |
Автор: hente 15.7.2009, 06:57 |
А почему никто не предложил разделяемую память? Очень удобно!!! Ну а в качестве синхронизации например симофоры ![]() |
Автор: mrbrooks 15.7.2009, 07:38 |
а ты внимательно почитал предыдущие посты - прежде чем обличать нас в невежестве? ![]() |
Автор: 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 | ||
|
Автор: SerK 29.7.2009, 19:52 |
jonie Ну нет времени, перепысывать, зайдите на сайт, изучите внимательно код. Все передеется и строка , в том числе. Еще раз даю ссылку. http://www.dudarik.wallst.ru/dudarikfiles/php/htm_temples/atom.php |
Автор: dumb 30.7.2009, 03:43 | ||||
jonie то это зачем? - он просто подсказал, как передать строку, используя SendMessage. ну и по ходу замечу, что код, приведенный в ссылке, конечно можно использовать как пример, но сам по себе он весьма убог: индикатор удаления файлов через отдельный .exe - моветон, и утечка атомов - на сладкое.
|
Автор: SerK 7.8.2009, 14:58 | ||
dumb Объясните, пожалуйста, что значит
Насколько я понял там атом создается, с помощью атома передается строковое значение другой программе (имена удленных файлов), а при закрытии программы атом удаляется с помощью GlobalDeleteAtom. Где здесь утечка атомов?. |
Автор: SerK 11.8.2009, 09:37 |
dumb Я понял вас. Нужно создавать и удалять атом сразу же после применения. |
Автор: Zakhar_Shan 14.9.2009, 09:55 |
Спасибо за помощь, жаль постов мало, не могу рейтинги поднимать. Поэтому просто большое спасибо!!!! ![]() |