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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: QSerial приём данных  (Прочитано 12710 раз)
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #30 : Ноябрь 08, 2020, 18:42 »

Заголовочный файл нужен ?
Нет. Догадываюсь, в чём у вас проблема. waitForReadyRead вам нужен тут только для того, чтобы хоть как то отдать время центральному процессору. Тут надо либо по-другому строить архитектуру (чтобы нормально использовать сигналы-слоты) либо в цикле (при ожидании) периодически вызывать QCoreApplication::processEvents.
Ну и, при полном приёме данных (после заполнения буфера полезными данными), лучше взвести какой-нибудь флаг. Либо выпустить сигнал. Хотя тут "на вкус и цвет все фломастеры разные" Улыбающийся
Записан

kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #31 : Ноябрь 08, 2020, 19:26 »

ЛОЛ  Смеющийся ФЭЙСПАЛМ. Я хз нафига я вообще влез в эту тему.
« Последнее редактирование: Ноябрь 08, 2020, 19:29 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #32 : Ноябрь 08, 2020, 19:35 »

ЛОЛ  Смеющийся ФЭЙСПАЛМ. Я хз нафига я вообще влез в эту тему.
Затем, чтобы написать этот пост. Наверное. Улыбающийся
Записан

qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #33 : Ноябрь 08, 2020, 19:57 »

bool SendCom::SendAndRead()

не должна функция делать и запись и чтение, разделяй и переписывай код
и никаких sleep и waitForReadyRead - не нужно
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #34 : Ноябрь 08, 2020, 20:19 »

Заголовочный файл нужен ?
Когда здесь пишут о примере, то имеется в виду минимальный проект, с профайлом и всеми заголовочными, и с main.
И надо внимательно читать ответы и советы. Тем более от автора библиотеки. Это на будущее, если здесь останетесь.
Если опять мимо, то - где цикл событий? Ну, например, QCoreApplication::exec()?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
paibolit
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #35 : Ноябрь 08, 2020, 21:18 »


не должна функция делать и запись и чтение, разделяй и переписывай код
и никаких sleep и waitForReadyRead - не нужно


Поскольку это мой дебют в QT - можно по подробнее: в чем проблема если даю запрос потом пауза и чтение (про GUI не надо рассказывать)

Нет. Догадываюсь, в чём у вас проблема. waitForReadyRead вам нужен тут только для того, чтобы хоть как то отдать время центральному процессору. Тут надо либо по-другому строить архитектуру (чтобы нормально использовать сигналы-слоты) либо в цикле (при ожидании) периодически вызывать QCoreApplication::processEvents.
Ну и, при полном приёме данных (после заполнения буфера полезными данными), лучше взвести какой-нибудь флаг. Либо выпустить сигнал. Хотя тут "на вкус и цвет все фломастеры разные" Улыбающийся
Может я заблуждаюсь - поправьте, когда данные приходят в COM порт они складываются сначала в буфер винды и выполнение этого процесса никоим образом не касается выполнения QTшного кода, а когда дело у QT доходит до забора данных с буфера COM порта - QT фактически забирает эти данные с памяти (с буфера винды) а не непосредственно с COM порта.

Как бы тема для новичков, но некоторые ответы просто "убивают" Плачущий

Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #36 : Ноябрь 08, 2020, 21:28 »

Может я заблуждаюсь - поправьте, когда данные приходят в COM порт они складываются сначала в буфер винды и выполнение этого процесса никоим образом не касается выполнения QTшного кода, а когда дело у QT доходит до забора данных с буфера COM порта - QT фактически забирает эти данные с памяти (с буфера винды) а не непосредственно с COM порта.
Складываться то они складываются, но вот сам сигнал пока обработаться не может - все крутится в цикле и внешние события либо не приходят, либо обработаться не могут. QCoreApplication::processEvents ведь не просто так придумали.
Вообще, в GUI лучше ничего долго в функции не крутить, а нормально сделать обработку сигналов/слотов.
Записан

qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #37 : Ноябрь 08, 2020, 22:19 »

Поскольку это мой дебют в QT - можно по подробнее: в чем проблема если даю запрос потом пауза и чтение (про GUI не надо рассказывать)

В обработчике сигнала - никогда не делай паузы:
1. записал и вышел, жди сигнал чтения
2. получил сигнал чтения - вычитал всё и обработал без пауз

какую книгу/статью ты прочитал про сигналы и слоты прежде чем начать писать на qt ?
Записан
paibolit
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #38 : Ноябрь 08, 2020, 23:45 »

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


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