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

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

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

    Firefox Гость

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

    dreamer Гость

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

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

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

    ierofant Гость

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

    Firefox Гость

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

    dreamer Гость

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

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

    a0z Well-Known Member

    Репутация:
    0
    Регистрация:
    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 Гость

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

    vital Больной Компом Детектед

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

    Kmet Well-Known Member
    Java Team

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

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