обмен данными между программами

  • Автор темы Firefox
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Firefox

#1
У меня такой вопросик подскажите пожалуйста. я делаю управляющую программу которая должна запускать другие программы и отслеживать если одна прога закрылась то открыть другую(при чем в другой проге выбирается какую перед закрытием). моя программа и 10 других будут находиться на одном компьютере. я так понимаю для получения данных от закрывающейся программы необходимо с ней как-то связаться. смотрела в интернете есть разные технологии:
1)сокеты(но они как мне кажется более подходят для обмена по сети и громоздко немного)
2)pipe каналы. но мне придется с каждой прогой новый устанавливать
3)dde - пока не могу оценить
4) технология копи-паст только в буфер где-то видела такое.
подскажите путь по которому можно двигаться с наименьшими проблемами? и если кто знает где почитать чтоб было понятно
 
D

dreamer

#2
DDE уже староват, буфер использовать - вообще вандализм. Сокеты - да, громоздко. Зато pipe - совсем неплохо.

Хотя не понимаю вообще причину, зачем нужен этот процесс-надзиратель. По логике, если программа должна знать, какая программа должна запуститься за ней, эта программа будет разработана Вами же. А что в этом случае мешает запрограммировать её так, чтобы она сама, не обращаясь к другому процессу, запустила перед закрытием другую программу?

Даже если всё равно нужно запускать с помощью управляющей программы, соединяться должна не она, а с ней.
 
I

ierofant

#3
Есть ещё D-Bus, очень удобен. Пока это только для Linux, если вы работаете в Windows, вам этот вариант не подойдёт, версия под него в стадии разработки.
 
F

Firefox

#4
Работаю в windows, в том то и весь вопрос, что программы которые надо запускать будет делают разные люди и заставлять их добавлять туда какие-то части по запускам других прог никто не хочет. да и все стремятся к обобщенности как бы так сказать не засорять отдельные модули ненужными кодами. моя задача скажем так скоординировать их правильный запуск.
 
D

dreamer

#5
Если "никто не хочет", то есть один вариант - вылавливать handle окна программ и периодически троллить их на предмет того, существует ли окно. Межпроцессное взаимодействие (т.е. предложенные выше варианты) тут не поможет.

А вообще, лучше пересмотреть архитектуру разрабатываемой системы, чем потом разгрeбать косяки от того, что в итоге получилось.
 

a0z

Well-known member
15.03.2011
108
0
#6
Если это не слишком серьёзный проект, я бы передавал через файл.

Задаём директорию, например c:\run

Умирающая програма создаёт уникальный файл, через GetTempFile, или через time+pid и записывает в него, что надо запустить дальше. Например
c:\Program Files\NSO\next.exe param1 param2
И со спокойной душой умирает.

Надзиратель следит за появлением новых файлов в определённой директории, считывает содержимое, запускает и удаляет файл.

З.Ы. Что-бы не было такого, что файл ещё не дописан, а его уже пытается считать надзиратель, можно:
1. Создавать файл в поддиректории c:\run\pending, а потом мувать в c:\run
2. После обнаружения нового файла подождать 1 секунду.
 
F

Firefox

#7
Использовала Clipboard удобно и быстро. в моем случае пользователь в память сам ничего заносить не может при работе программы так что идеальный вариант
 

Kmet

Java Team
25.05.2006
1 036
8
#9
дешево и сердито: перехватить stdout.
Ынтерпрайзно: использовать какой нить Message Oriented Middleware
 
Статус
Закрыто для дальнейших ответов.