Russian Qt Forum
Ноябрь 22, 2024, 21:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: GUI<<->Console обмен сообщениями и данными.  (Прочитано 21645 раз)
MaxoBik
Гость
« : Август 03, 2015, 23:33 »

Доброго времени суток, есть консольное приложения не на QT и есть QT GUI приложения, которое запускает это консольное приложен. Так вот, между этими процессами нужно наладить обмен сообщениями и передачу из консольного приложения в GUI некоторой структуры данных - какую лучше всего схему IPC выбрать для этого?
Записан
Bepec
Гость
« Ответ #1 : Август 04, 2015, 02:01 »

Socket'ы. Все иные способы или нуждаются в дополнительном контроле, или же труднореализуемы.

PS во всяком случае, лучше и кроссплатформеннее метода я не видел.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #2 : Август 04, 2015, 05:35 »

Доброго времени суток, есть консольное приложения не на QT и есть QT GUI приложения, которое запускает это консольное приложен. Так вот, между этими процессами нужно наладить обмен сообщениями и передачу из консольного приложения в GUI некоторой структуры данных - какую лучше всего схему IPC выбрать для этого?
Пайпы (pipe).
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Август 04, 2015, 09:24 »

Может быть ещё QProcess заинтересует. Общается с программой через потоки ввода/вывода.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Август 04, 2015, 09:38 »

Может быть ещё QProcess заинтересует. Общается с программой через потоки ввода/вывода.
Это и есть пайпы. Улыбающийся
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Август 04, 2015, 10:06 »

Упс. Извиняюсь за безграмотность Улыбающийся
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Август 04, 2015, 10:08 »

Хочу развить тему и узнать, а что из себя представляют сокеты? Википедия особо не помогла разобраться.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Август 04, 2015, 10:22 »

Хочу развить тему и узнать, а что из себя представляют сокеты? Википедия особо не помогла разобраться.
Сетевые сокеты: QTcpSocket/QUdpSocket.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Август 04, 2015, 10:41 »

Ааа. То есть подразумевается, что на одной машине будет происходить общение через 127.0.0.1...
Голосую за QProcess! Улыбающийся

Кстати, я ещё наткнулся на метод разделения памяти. на сколько он хорош? Я так понял, что его преимущественно лучше использовать, если пишешь какой-то решатель, а в остальных случаях - QProcess. Или я ошибаюсь?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #9 : Август 04, 2015, 11:15 »

есть еще QLocalSocket...
Записан
MaxoBik
Гость
« Ответ #10 : Август 04, 2015, 11:43 »

Может быть ещё QProcess заинтересует. Общается с программой через потоки ввода/вывода.
Это и есть пайпы. Улыбающийся
QProcess, насколько я понял использует только в Windows пайпы и только для записи в запускаемый процесс, а читает данные из stdout приложения, при таком раскладе как мне получить структуру данных из консольного приложения? Сериализировать/приводить ее в текст и выводить в stdout? Такое что-то мне не очень кажется.
есть еще QLocalSocket...
Тот же PIPE в Windows. Да я читал какие есть способы в IPC в QT, мне вот нужно понять, что выбрать и как меньшими усилиями это реализовать.
« Последнее редактирование: Август 04, 2015, 11:45 от MaxoBik » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Август 04, 2015, 12:13 »

QProcess, насколько я понял использует только в Windows
Нет, пайпы это понятие кроссплатформенное. И появились они на юниксе.

и только для записи в запускаемый процесс
Организуются две трубы, т.е. связь двусторонняя.

при таком раскладе как мне получить структуру данных из консольного приложения? Сериализировать/приводить ее в текст и выводить в stdout?
Зачем ее приводить в текст. Пайп это канал данных, вы туда можете писать что захотите.
Записан
MaxoBik
Гость
« Ответ #12 : Август 04, 2015, 13:07 »


Зачем ее приводить в текст. Пайп это канал данных, вы туда можете писать что захотите.

Ну а как еще? К примеру пайпы QProcess - я подключился к сигналу readyReadStandardOutput, в нем получаю readAllStandardOutput, но проблема в том как я буду определять что это строка или структура данных которую записали в stdout в консольном приложении через fwrite?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Август 04, 2015, 13:11 »

Ну а как еще? К примеру пайпы QProcess - я подключился к сигналу readyReadStandardOutput, в нем получаю readAllStandardOutput, но проблема в том как я буду определять что это строка или структура данных которую записали в stdout в консольном приложении через fwrite?
Для любого обмена между несколькими участниками нужен протокол этого общения. Вы можете передавать команды/запросы от GUI к бекэнду, а он будет возвращать вам результаты, хоть строками, хоть бинарными структурами.
Как вы придумаете протокол, согласно этого протокола и будете определять, что вам шлет бекэнд.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #14 : Август 04, 2015, 13:17 »

Вы же заранее знаете в каком порядке у вас будут поступать данные? Вот и подставляйте их в соответствующие ячейки структуры. Главное при чтении не забывайте длину проверять.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 23.