Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: ammaximus от Апрель 25, 2014, 15:34



Название: Обмен сообщениями между процессами
Отправлено: ammaximus от Апрель 25, 2014, 15:34
В связи с большим объемом сообщений, возникла необходимость дополнить логер возможностью отображать данные на локальной машине БЕЗ передачи по сети.

Что за логер: http://www.prog.org.ru/index.php?topic=26149

Мой логер состоит из двух частей: библиотека qlc подключается к отслеживаемому проекту и предоставляет интерфейс для логирования, а QLogCat принимает данные и отображает их.

Так уж случилось, что QLogCat - это проект мудреных решений, и я решил не отступать от этой политики. В статической области хидера qlc был создан QProcess со ссылкой на QLogCat-морду. Таким образом, при первой попытке записи в лог, запускается морда, все последующие запуски уже идут туда. Запись осуществляется QProcess.write(). В морду, соответственно, был добавлен поток чтения из STDIN.

Получилось очень красивое решение, которое прекрасно работает, если логируемый процесс один. Но, стоит появиться новому процессу, как открывается новая морда, поскольку статическая область QLC на новую копию не распространяется.

Задача: придумать способ определять запущена ли сейчас морда и, если да, то подключиться к ней. (БЕЗ СЕТИ!)

1. Подключение через QProcess. Можно ли подключиться к существующему процессу? Я такой возможности не обнаружил.
2. Диспетчер, который будет принимать сообщения от нескольких процессов и перенаправлять на QProcess (поскольку функция write() не потокобезопасна).
3. QEvent(), QLocalSocket()?


P.S. Решил описать вопрос текстом, без подкрепления кодом, дабы не запутывать.