Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: 0...-5 от Декабрь 19, 2011, 07:12



Название: QProcess: управление процессами
Отправлено: 0...-5 от Декабрь 19, 2011, 07:12
Пишу два приложения: одно рассчитывает данные и записывает результаты расчетов в файл. Второе считывает данные из файла и занимается визуализацией. Встала задача после записи результатов в файл автоматически запускать программу визуализации. Решил использовать QProcess (раньше с этим классом не работал никогда). Возможны 2 ситуации: если визуализатор не запущен, то файл с данными можно передать через аргументы для запуска приложения. А что делать, если приложение уже запущено? Есть ли механизм, с помощью которого можно было бы передать визуализутору строку, содержащую имя файла и заставить его этот файл прочитать?
Всем спасибо!


Название: Re: QProcess: управление процессами
Отправлено: ddrtn от Декабрь 19, 2011, 08:07
Можно общаться с другим приложением через сокеты (не беру во внимание платформозависимое межпроцессное взаимодействие) по тсп через локал сокет. QProcess оставить для контроля работы процесса. Удобная штука для работы через сокеты JSON Rpc в библиотечке Qxt


Название: Re: QProcess: управление процессами
Отправлено: 0...-5 от Декабрь 19, 2011, 08:24
Можно общаться с другим приложением через сокеты (не беру во внимание платформозависимое межпроцессное взаимодействие) по тсп через локал сокет. QProcess оставить для контроля работы процесса. Удобная штука для работы через сокеты JSON Rpc в библиотечке Qxt

Честно говоря, не хотелось бы добавлять в проект работу с сетью...Благодаря Вам нашел класс QxtRpcService. Заинтриговала фраза "If all you want is a quick and easy solution to connect two Qt programs, QxtRpcService is for you." Нет какого-нибудь примера / опыта работы с ним, а то поиск молчит...


Название: Re: QProcess: управление процессами
Отправлено: Igors от Декабрь 19, 2011, 12:18
Недавно решал похожую задачу
http://www.prog.org.ru/index.php?topic=20018.msg135524#msg135524 (http://www.prog.org.ru/index.php?topic=20018.msg135524#msg135524)

Есть ли механизм, с помощью которого можно было бы передать визуализутору строку, содержащую имя файла и заставить его этот файл прочитать?
У меня приложение через определенный интервал времени проверяет не появился ли новый файл.

Средства обмена данными (между приложениями) могут быть разными, но "синхронизироваться" придется


Название: Re: QProcess: управление процессами
Отправлено: ddrtn от Декабрь 19, 2011, 13:16
по поводу QxtRPCService.
В связываемых приложениях создаются объекты QxtRPCService, связанные с одним и тем же QIODevice.
Далее прицепляются к ним сигналы и слоты любых объектов с помощью attachSignal и attachSlot.
Связующим звеном тут выступает rpcFunction.
Например, в первом приложении некоторый объект o1 вызывает сигнал readFile(QString fileName). Во втором приложении некоторый объект o2 имеет слот  readFile(QString fileName). Для того, чтобы вызвать слот объекта o2 из объекта o1 нужно в первом приложении сделать
Код:
rpcService->attachSignal(o1, SIGNAL(readFile(QString)), "readFile_QString");
а во втором
Код:
rpcService->attachSlot("readFile_QString",o2, SLOTreadFile(QString)));

Теоретически в качестве связующего QIODevice можно использовать и, например, файл. Но я не пробовал.
На мой взгляд тут лучше QLocalSocket


Название: Re: QProcess: управление процессами
Отправлено: 0...-5 от Декабрь 19, 2011, 14:08
Всем большое спасибо!