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

Тема в разделе "Другие", создана пользователем Firefox, 18 фев 2011.

Статус темы:
Закрыта.
  1. Firefox

    Firefox Гость

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

    dreamer Гость

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

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

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

    ierofant Гость

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

    Firefox Гость

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

    dreamer Гость

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

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

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Если это не слишком серьёзный проект, я бы передавал через файл.

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

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

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

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

    Firefox Гость

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

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    т.е. скажем блокнот или ворд вы ему паралельно запрещаете юзать?
     
  9. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    дешево и сердито: перехватить stdout.
    Ынтерпрайзно: использовать какой нить Message Oriented Middleware
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей