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

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

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

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

Сообщений: 1177


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

ответ будет точнее, если будет известно что делает консольное приложение
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Ну, грубо говоря это и есть сериализация данных.
Нет, серилизация это перевод данных из одного представления в другое.
Протокол это правила взаимодействия нескольких участников.
Записан
MaxoBik
Гость
« Ответ #18 : Август 04, 2015, 13:22 »

ответ будет точнее, если будет известно что делает консольное приложение

Это вообще не важно что оно делает, здесь разговор про обмен данными между двумя процессами.

Вы же заранее знаете в каком порядке у вас будут поступать данные? Вот и подставляйте их в соответствующие ячейки структуры. Главное при чтении не забывайте длину проверять.
Через это же пайпы будет идти и строки, ладно я понял направления, попробую через пайпы и свою кастомную сериализацию.
Всем СПАСИБО за подсказки.
Записан
Bepec
Гость
« Ответ #19 : Август 04, 2015, 16:22 »

Я б всё же советовал socket'ы. Там меньше подводных камней и очень быстро можно организовать сетевое взаимодействие Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Я б всё же советовал socket'ы. Там меньше подводных камней и очень быстро можно организовать сетевое взаимодействие Улыбающийся
А какие подводные камни в пайпах?
Прямой канал данных, без дополнительного оверхеда, связанного с накручиванием/раскручиванием заголовков данных по всему сетевому стеку, который будет у сетевых сокетов. Я еще пойму локальные сокеты, но в венде их вроде нет (точно не знаю).
Записан
MaxoBik
Гость
« Ответ #21 : Август 04, 2015, 22:00 »

В общем QProcess как PIPE в винде использовать нереально - нет возможности без кучи багов читать stdin в неблокирующем режиме, да у меня еще и в потоках это дело - вообще начинается дикие пляски. В nix все прекрасно работает через select, в виндовс дохлая затея. Придется QLocalSocket использовать.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

В общем QProcess как PIPE в винде использовать нереально - нет возможности без кучи багов читать stdin в неблокирующем режиме, да у меня еще и в потоках это дело - вообще начинается дикие пляски. В nix все прекрасно работает через select, в виндовс дохлая затея. Придется QLocalSocket использовать.
Если вы используете QProcess, то у него есть сигнал, о приходе новых данных.
Записан
MaxoBik
Гость
« Ответ #23 : Август 04, 2015, 22:11 »

Если вы используете QProcess, то у него есть сигнал, о приходе новых данных.
Да нет, с QT приложениям то все нормально, с консольным приложениям написаным на чистом С\С++, которое и запускает мой QT GUI клиент, проблемы со stdin-ом в виндовс, придется создавать поток, который будет читать stdin, добавлять ему синхронизацию и прочие и прочие мелочи. Нет возможности в виндовс нормально читать из stdin продолжительное время в неблокирующем режиме.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Да нет, с QT приложениям то все нормально, с консольным приложениям написаным на чистом С\С++, которое и запускает мой QT GUI клиент, проблемы со stdin-ом в виндовс, придется создавать поток, который будет читать stdin, добавлять ему синхронизацию и прочие и прочие мелочи. Нет возможности в виндовс нормально читать из stdin продолжительное время в неблокирующем режиме.
Такие возможности есть, boost.process прекрасно это умеет.
Записан
MaxoBik
Гость
« Ответ #25 : Август 04, 2015, 22:31 »

Да нет, с QT приложениям то все нормально, с консольным приложениям написаным на чистом С\С++, которое и запускает мой QT GUI клиент, проблемы со stdin-ом в виндовс, придется создавать поток, который будет читать stdin, добавлять ему синхронизацию и прочие и прочие мелочи. Нет возможности в виндовс нормально читать из stdin продолжительное время в неблокирующем режиме.
Такие возможности есть, boost.process прекрасно это умеет.
Ну да, а сверху еще помазать Boost Asio, но мне тянуть еще и Boost жирно будет как-то - все равно что забивать почтовые гвозди кувалдой, я попробую лучше стандартными методами QT и ОС реализовать.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Ну да, а сверху еще помазать Boost Asio, но мне тянуть еще и Boost жирно будет как-то - все равно что забивать почтовые гвозди кувалдой, я попробую лучше стандартными методами QT и ОС реализовать.
Ну так в boost.process и можно посмотреть как он это делает в венде.
Записан
MaxoBik
Гость
« Ответ #27 : Август 04, 2015, 22:38 »

Ну да, а сверху еще помазать Boost Asio, но мне тянуть еще и Boost жирно будет как-то - все равно что забивать почтовые гвозди кувалдой, я попробую лучше стандартными методами QT и ОС реализовать.
Ну так в boost.process и можно посмотреть как он это делает в венде.

Как раз сейчас смотрю  Смеющийся.
Записан
Bepec
Гость
« Ответ #28 : Август 04, 2015, 22:52 »

А можно просто использовать сокеты Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

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


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