|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
ReadyRead будит поток с задержкой?16.02.2018, 10:20. Показов 4078. Ответов 54
Метки нет (Все метки)
Работаем с COM-портами... есть линия на которой висит 6 клиентов и один запросчик... запросчик опрашивает клиентов по очереди, а они ему отвечают... идет запрос, если в течении 100мс ответ не получен, то отправляется следующий запрос...
работа с COM-портом вынесена в отдельный не GUI поток, как у клиента, так и у сервера... про отладке программы в логе запросчика обнаружена следующая ситуация: запросчик отправляет запрос, ждет ответа 100мс, его нет и он отправляет следующий запрос (вроде все логично)... НО!!! в логе ответчика четко видно, что после получения запроса от ответил практически мгновенно (намного быстрее 100мс + сами сообщения по линии не большие)... по факту получаем следующее - был запрос, ответчик ответил, но поток запросчика не проснулся по сигналу readyRead (по которому я и читаю пришедшие данные), а проснулся по таймеру в 100мс... прикрепил кусок лога, с отображением проблемы.... есть какие-то варианты, как это устранить???
0
|
|
| 16.02.2018, 10:20 | |
|
Ответы с готовыми решениями:
54
БУДИТ РАБОТАТЬ БП? QUdpSocket readyRead QSerialPort и readyRead |
|
370 / 226 / 53
Регистрация: 18.10.2017
Сообщений: 2,420
|
|
| 16.02.2018, 20:16 | |
|
Digital_Cry, А зачем использовать инициализацию на WinAPI, если Qt давно уже есть QSerialPort,
я, правда, им не пользуюсь.
0
|
|
|
|
|
| 16.02.2018, 20:20 | |
|
А можно совсем тупой вопрос? Никто не посоветовал парню делать
flush сразу после write? Вроде, базовая вещь, но вместо неё местные гении сразу зарылись в системные таймауты. Бессмысленно и беспощадно.
0
|
|
|
Заблокирован
|
|
| 16.02.2018, 20:22 | |
|
0
|
|
|
42 / 40 / 7
Регистрация: 21.05.2012
Сообщений: 199
|
|
| 16.02.2018, 21:11 | |
|
> Никто не посоветовал парню делать flush сразу после write
Не стоит, уверяю. Интересно просто знать что за модель/чип USB-serial он использовал. Если PL, FTDI, CH, то должно быть все нормально, они проверены и не раз в разных проектах. Что-то мне имх-уется, что где-то что-то он делал не так, но без кода, как говорили выше, нет смысла что-либо обсуждать. А лучше иметь минимальный пример, который воспроизводит проблему.
0
|
|
|
Заблокирован
|
||
| 16.02.2018, 21:19 | ||
|
0
|
||
|
Заблокирован
|
||
| 16.02.2018, 21:27 | ||
0
|
||
|
Заблокирован
|
|
| 16.02.2018, 21:31 | |
|
0
|
|
|
Заблокирован
|
||
| 16.02.2018, 22:01 | ||
0
|
||
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|||||||
| 16.02.2018, 22:49 [ТС] | |||||||
а подготовить код - нужно время... многое из кода нужно вырезать, потому что я для себя любимого пишу))) тем более проблема проявляется только в специфических, губительных, условиях... система нагружена и работаем через USBtoCOM... + даже в этой "непредвиденной" ситуации прога отлавливает ненормальное поведение, сообщает о нем и работает дальше без глобальных сбоев)
0
|
|||||||
|
Заблокирован
|
||
| 16.02.2018, 23:06 | ||
Если у тебя тайминги неправильно выставлены и особенно если у тебя шнур USBtoCOM хреновый у которого с дуплексом хреново, то твой девайс вполне может не успевать отработать, то есть он не успевает ответить, по этому от него и ответа нет. Эти тайминги зависят от BaudRate, на каждую скорость нужно свои подбирать, так же зависят от самого железа и драйверов. Казалось бы две одинаковые железки, а на одних на столько мелкие тайминги могут отработать, которые ты для скорости выставил, а на другом - хрен. Можешь для теста поставить большие тайминги, увидишь - устройства будут отрабатывать.P.S.: 100 мс - это очень маленький тайминг, хотя опять же, зависит от девайса и от COM
0
|
||
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
||
| 16.02.2018, 23:13 [ТС] | ||
|
Digital_Cry, а, ты про эти тайминги... я их так и не устанавливал, для винды понятно как, а вот в дебри Linux мне лезть не захотелось)))) тем более об это писалось еще вот тут:
без преобразователя работает - работает)) а для того чтоб совесть чиста была, кину сюда завтра лог AccessPort, там четко видно, где проблема)
0
|
||
|
|
|||
| 16.02.2018, 23:31 | |||
![]() К примеру где гарантии что задержки не вносит сам AccessPort ? Добавлено через 1 минуту
0
|
|||
|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
||
| 16.02.2018, 23:34 [ТС] | ||
|
есть класс А, в нем: а1) Класс-обертка над QSerialPort а2) Класс, который отвечает за обработку сырых пришедших данных (а1 по приходу данных тупо отсылает сигнал с ними сюда) а3) Класс, который отвечает за создание запросов а4) Класс, в котором написана логика с таймерами (100мс и т.д.) и вторичная обработка данных (а2 ему передает целые-корректные пакеты, а этот класс их разгребает и решает, что дальше делать) и есть класс Б, которой контролирует классы А1-А6 (пока шесть, будет девять).... А1-А6 крутяться в отдельных потоках.... вот.. вы просите просто а1... по нему ничего не будет видно... вам нужен А целиком, для этого нужно многое убрать, а на это, увы, пока нет времени... если проблема будет себя проявлять и на аппаратных портах, то я скорее всего вернусь
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 17.02.2018, 00:01 | |
|
а2 умеет собирать пакет из кусков? Потому что судя по всему у тебя просто пакет приходит не полностью, а длину проверяешь только после проверки контрольной суммы. А нужен именно "ожидатель" пакета, т.е. если полученная длина пакета адекватна, попробовать подождать его оставшийся кусок (и только после этого проверять контрольную сумму). Иначе же подождать максимально возможное время генерации ответа и считать (чтобы выкинуть) из порта весь мусор, который там накопился после сбоя связи.
0
|
|
|
|
||
| 17.02.2018, 00:29 | ||
|
Ибо по Вашему описанию понятно что ошибка заложена на уровне проектирования.
0
|
||
| 17.02.2018, 00:29 | |
|
Будит ли нормально работать? Не работает QTcpSocket::readyRead Баг QAudioInput + readyRead QAbstractSocket::readyRead и winsockets Notification из сервиса не будит устройство Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|