|
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
|
|
ReadyRead будит поток с задержкой?16.02.2018, 10:20. Показов 3944. Ответов 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,404
|
|
| 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 | |
|
Помогаю со студенческими работами здесь
40
Будит ли нормально работать? Не работает QTcpSocket::readyRead Баг QAudioInput + readyRead QAbstractSocket::readyRead и winsockets Notification из сервиса не будит устройство Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|