Russian Qt Forum
Ноябрь 23, 2024, 01:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
GUI<<->Console обмен сообщениями и данными.
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: GUI<<->Console обмен сообщениями и данными. (Прочитано 21660 раз)
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #15 :
Август 04, 2015, 13:18 »
Цитата: Old от Август 04, 2015, 13:11
Цитата: MaxoBik от Август 04, 2015, 13:07
Ну а как еще? К примеру пайпы QProcess - я подключился к сигналу readyReadStandardOutput, в нем получаю readAllStandardOutput, но проблема в том как я буду определять что это строка или структура данных которую записали в stdout в консольном приложении через fwrite?
Для любого обмена между несколькими участниками нужен протокол этого общения. Вы можете передавать команды/запросы от GUI к бекэнду, а он будет возвращать вам результаты, хоть строками, хоть бинарными структурами.
Как вы придумаете протокол, согласно этого протокола и будете определять, что вам шлет бекэнд.
Ну, грубо говоря это и есть сериализация данных.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #16 :
Август 04, 2015, 13:19 »
ответ будет точнее, если будет известно что делает консольное приложение
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #17 :
Август 04, 2015, 13:21 »
Цитата: MaxoBik от Август 04, 2015, 13:18
Ну, грубо говоря это и есть сериализация данных.
Нет, серилизация это перевод данных из одного представления в другое.
Протокол это правила взаимодействия нескольких участников.
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #18 :
Август 04, 2015, 13:22 »
Цитата: qate от Август 04, 2015, 13:19
ответ будет точнее, если будет известно что делает консольное приложение
Это
вообще
не важно что оно делает, здесь разговор про обмен данными между двумя процессами.
Цитата: __Heaven__ от Август 04, 2015, 13:17
Вы же заранее знаете в каком порядке у вас будут поступать данные? Вот и подставляйте их в соответствующие ячейки структуры. Главное при чтении не забывайте длину проверять.
Через это же пайпы будет идти и строки, ладно я понял направления, попробую через пайпы и свою кастомную сериализацию.
Всем СПАСИБО за подсказки.
Записан
Bepec
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #19 :
Август 04, 2015, 16:22 »
Я б всё же советовал socket'ы. Там меньше подводных камней и очень быстро можно организовать сетевое взаимодействие
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #20 :
Август 04, 2015, 20:08 »
Цитата: Bepec от Август 04, 2015, 16:22
Я б всё же советовал socket'ы. Там меньше подводных камней и очень быстро можно организовать сетевое взаимодействие
А какие подводные камни в пайпах?
Прямой канал данных, без дополнительного оверхеда, связанного с накручиванием/раскручиванием заголовков данных по всему сетевому стеку, который будет у сетевых сокетов. Я еще пойму локальные сокеты, но в венде их вроде нет (точно не знаю).
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #21 :
Август 04, 2015, 22:00 »
В общем QProcess как PIPE в винде использовать нереально - нет возможности без кучи багов читать stdin в неблокирующем режиме, да у меня еще и в потоках это дело - вообще начинается дикие пляски. В nix все прекрасно работает через select, в виндовс дохлая затея. Придется QLocalSocket использовать.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #22 :
Август 04, 2015, 22:04 »
Цитата: MaxoBik от Август 04, 2015, 22:00
В общем QProcess как PIPE в винде использовать нереально - нет возможности без кучи багов читать stdin в неблокирующем режиме, да у меня еще и в потоках это дело - вообще начинается дикие пляски. В nix все прекрасно работает через select, в виндовс дохлая затея. Придется QLocalSocket использовать.
Если вы используете QProcess, то у него есть сигнал, о приходе новых данных.
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #23 :
Август 04, 2015, 22:11 »
Цитата: Old от Август 04, 2015, 22:04
Если вы используете QProcess, то у него есть сигнал, о приходе новых данных.
Да нет, с QT приложениям то все нормально, с консольным приложениям написаным на чистом С\С++, которое и запускает мой QT GUI клиент, проблемы со stdin-ом в виндовс, придется создавать поток, который будет читать stdin, добавлять ему синхронизацию и прочие и прочие мелочи. Нет возможности в виндовс нормально читать из stdin продолжительное время в неблокирующем режиме.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #24 :
Август 04, 2015, 22:15 »
Цитата: MaxoBik от Август 04, 2015, 22:11
Да нет, с QT приложениям то все нормально, с консольным приложениям написаным на чистом С\С++, которое и запускает мой QT GUI клиент, проблемы со stdin-ом в виндовс, придется создавать поток, который будет читать stdin, добавлять ему синхронизацию и прочие и прочие мелочи. Нет возможности в виндовс нормально читать из stdin продолжительное время в неблокирующем режиме.
Такие возможности есть, boost.process прекрасно это умеет.
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #25 :
Август 04, 2015, 22:31 »
Цитата: Old от Август 04, 2015, 22:15
Цитата: MaxoBik от Август 04, 2015, 22:11
Да нет, с QT приложениям то все нормально, с консольным приложениям написаным на чистом С\С++, которое и запускает мой QT GUI клиент, проблемы со stdin-ом в виндовс, придется создавать поток, который будет читать stdin, добавлять ему синхронизацию и прочие и прочие мелочи. Нет возможности в виндовс нормально читать из stdin продолжительное время в неблокирующем режиме.
Такие возможности есть, boost.process прекрасно это умеет.
Ну да, а сверху еще помазать Boost Asio, но мне тянуть еще и Boost жирно будет как-то - все равно что забивать почтовые гвозди кувалдой, я попробую лучше стандартными методами QT и ОС реализовать.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #26 :
Август 04, 2015, 22:35 »
Цитата: MaxoBik от Август 04, 2015, 22:31
Ну да, а сверху еще помазать Boost Asio, но мне тянуть еще и Boost жирно будет как-то - все равно что забивать почтовые гвозди кувалдой, я попробую лучше стандартными методами QT и ОС реализовать.
Ну так в boost.process и можно посмотреть как он это делает в венде.
Записан
MaxoBik
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #27 :
Август 04, 2015, 22:38 »
Цитата: Old от Август 04, 2015, 22:35
Цитата: MaxoBik от Август 04, 2015, 22:31
Ну да, а сверху еще помазать Boost Asio, но мне тянуть еще и Boost жирно будет как-то - все равно что забивать почтовые гвозди кувалдой, я попробую лучше стандартными методами QT и ОС реализовать.
Ну так в boost.process и можно посмотреть как он это делает в венде.
Как раз сейчас смотрю
.
Записан
Bepec
Гость
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #28 :
Август 04, 2015, 22:52 »
А можно просто использовать сокеты
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: GUI<<->Console обмен сообщениями и данными.
«
Ответ #29 :
Август 05, 2015, 07:10 »
Цитата: Bepec от Август 04, 2015, 22:52
А можно просто использовать сокеты
Для обеспечения асинхронной работы с сокетами понадобятся такие-же телодвижения.
Записан
Страниц:
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...