Russian Qt Forum
Ноябрь 22, 2024, 21:31
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
GUI<<->Console обмен сообщениями и данными.
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: GUI<<->Console обмен сообщениями и данными. (Прочитано 21646 раз)
MaxoBik
Гость
GUI<<->Console обмен сообщениями и данными.
«
:
Август 03, 2015, 23:33 »
Доброго времени суток, есть консольное приложения не на QT и есть QT GUI приложения, которое запускает это консольное приложен. Так вот, между этими процессами нужно наладить обмен сообщениями и передачу из консольного приложения в GUI некоторой структуры данных - какую лучше всего схему IPC выбрать для этого?
Записан
Bepec
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #1 :
Август 04, 2015, 02:01 »
Socket'ы. Все иные способы или нуждаются в дополнительном контроле, или же труднореализуемы.
PS во всяком случае, лучше и кроссплатформеннее метода я не видел.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #2 :
Август 04, 2015, 05:35 »
Цитата: MaxoBik от Август 03, 2015, 23:33
Доброго времени суток, есть консольное приложения не на QT и есть QT GUI приложения, которое запускает это консольное приложен. Так вот, между этими процессами нужно наладить обмен сообщениями и передачу из консольного приложения в GUI некоторой структуры данных - какую лучше всего схему IPC выбрать для этого?
Пайпы (pipe).
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #3 :
Август 04, 2015, 09:24 »
Может быть ещё QProcess заинтересует. Общается с программой через потоки ввода/вывода.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #4 :
Август 04, 2015, 09:38 »
Цитата: __Heaven__ от Август 04, 2015, 09:24
Может быть ещё QProcess заинтересует. Общается с программой через потоки ввода/вывода.
Это и есть пайпы.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #5 :
Август 04, 2015, 10:06 »
Упс. Извиняюсь за безграмотность
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #6 :
Август 04, 2015, 10:08 »
Хочу развить тему и узнать, а что из себя представляют сокеты? Википедия особо не помогла разобраться.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #7 :
Август 04, 2015, 10:22 »
Цитата: __Heaven__ от Август 04, 2015, 10:08
Хочу развить тему и узнать, а что из себя представляют сокеты? Википедия особо не помогла разобраться.
Сетевые сокеты: QTcpSocket/QUdpSocket.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #8 :
Август 04, 2015, 10:41 »
Ааа. То есть подразумевается, что на одной машине будет происходить общение через 127.0.0.1...
Голосую за QProcess!
Кстати, я ещё наткнулся на метод разделения памяти. на сколько он хорош? Я так понял, что его преимущественно лучше использовать, если пишешь какой-то решатель, а в остальных случаях - QProcess. Или я ошибаюсь?
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #9 :
Август 04, 2015, 11:15 »
есть еще QLocalSocket...
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #10 :
Август 04, 2015, 11:43 »
Цитата: Old от Август 04, 2015, 09:38
Цитата: __Heaven__ от Август 04, 2015, 09:24
Может быть ещё QProcess заинтересует. Общается с программой через потоки ввода/вывода.
Это и есть пайпы.
QProcess, насколько я понял использует только в Windows пайпы и только для записи в запускаемый процесс, а читает данные из stdout приложения, при таком раскладе как мне получить структуру данных из консольного приложения? Сериализировать/приводить ее в текст и выводить в stdout? Такое что-то мне не очень кажется.
Цитата: Fregloin от Август 04, 2015, 11:15
есть еще QLocalSocket...
Тот же PIPE в Windows. Да я читал какие есть способы в IPC в QT, мне вот нужно понять, что выбрать и как меньшими усилиями это реализовать.
«
Последнее редактирование: Август 04, 2015, 11:45 от MaxoBik
»
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #11 :
Август 04, 2015, 12:13 »
Цитата: MaxoBik от Август 04, 2015, 11:43
QProcess, насколько я понял использует только в Windows
Нет, пайпы это понятие кроссплатформенное. И появились они на юниксе.
Цитата: MaxoBik от Август 04, 2015, 11:43
и только для записи в запускаемый процесс
Организуются две трубы, т.е. связь двусторонняя.
Цитата: MaxoBik от Август 04, 2015, 11:43
при таком раскладе как мне получить структуру данных из консольного приложения? Сериализировать/приводить ее в текст и выводить в stdout?
Зачем ее приводить в текст. Пайп это канал данных, вы туда можете писать что захотите.
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #12 :
Август 04, 2015, 13:07 »
Цитата: Old от Август 04, 2015, 12:13
Зачем ее приводить в текст. Пайп это канал данных, вы туда можете писать что захотите.
Ну а как еще? К примеру пайпы QProcess - я подключился к сигналу readyReadStandardOutput, в нем получаю readAllStandardOutput, но проблема в том как я буду определять что это строка или структура данных которую записали в stdout в консольном приложении через fwrite?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #13 :
Август 04, 2015, 13:11 »
Цитата: MaxoBik от Август 04, 2015, 13:07
Ну а как еще? К примеру пайпы QProcess - я подключился к сигналу readyReadStandardOutput, в нем получаю readAllStandardOutput, но проблема в том как я буду определять что это строка или структура данных которую записали в stdout в консольном приложении через fwrite?
Для любого обмена между несколькими участниками нужен протокол этого общения. Вы можете передавать команды/запросы от GUI к бекэнду, а он будет возвращать вам результаты, хоть строками, хоть бинарными структурами.
Как вы придумаете протокол, согласно этого протокола и будете определять, что вам шлет бекэнд.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #14 :
Август 04, 2015, 13:17 »
Вы же заранее знаете в каком порядке у вас будут поступать данные? Вот и подставляйте их в соответствующие ячейки структуры. Главное при чтении не забывайте длину проверять.
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...