Russian Qt Forum
Ноябрь 24, 2024, 15:46
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
[Решено] Скорость работы модели слот-сигнал
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [Решено] Скорость работы модели слот-сигнал (Прочитано 3771 раз)
titan83
Гость
[Решено] Скорость работы модели слот-сигнал
«
:
Август 28, 2014, 08:41 »
Здравствуйте.
На ARM9 400Mhz запускаю программу для опроса шины CAN, для чего использую подсистему ядра SocketCAN, она создает сетевой интерфейс, с которым можно работать как с простым сокетом.
Ну я, как простой посан с Урала, делаю простой класс для отлова входящих сообщений на шине, применяя для этих целей в первом заходе QSocketNotifier - и все вроде бы работает, сообщения отлавливаются, но! я отключаю физически кабель шины, а сообщения все поступают и поступают... Видимо имеет место быть буферизация, т.к. через некоторое время поток кадров прекращается.
Грусть-печаль... Ставлю пакет can-utils, в его составе есть candump, запускаю и вижу, что входящий поток довольно быстрый (около 10 кадров в секунду), отключаю провод и прием сразу останавливается, т.е. входящий поток обрабатывается с той скоростью, с которой он поступает.
В qt же я получаю от силы три кадра в секунду - остальное в буфер. Естественно, это крайне неприятно, ибо на сообщения устройства надо реагировать немедленно, а не через минуту.
Попробовал я отказаться от QSocketNotifier - сделал свой poll() - все так же(
Посмотрел код того же candump - там все делается аналогично - открытие порта и потом select(), но там нет оберток qt, неужели все настолько медленно?
«
Последнее редактирование: Август 28, 2014, 11:52 от titan83
»
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Скорость работы модели слот-сигнал
«
Ответ #1 :
Август 28, 2014, 08:47 »
Цитата: titan83 от Август 28, 2014, 08:41
неужели все настолько медленно?
DirectConnect сводится к обычному прямому вызову метода.
Цитата: titan83 от Август 28, 2014, 08:41
Попробовал я отказаться от QSocketNotifier - сделал свой poll() - все так же(
Т.е. вы сделали свой цикл с select как в candump, а он работает медленней чем в candump? Как то не верится, что проблема в сигналах?
Записан
titan83
Гость
Re: Скорость работы модели слот-сигнал
«
Ответ #2 :
Август 28, 2014, 10:00 »
Цитата: Old от Август 28, 2014, 08:47
Т.е. вы сделали свой цикл с select как в candump, а он работает медленней чем в candump? Как то не верится, что проблема в сигналах?
Я лишь хочу разобраться в чем именно проблема, ибо в таком виде меня это абсолютно не устраивает.
Я, кстати, делал poll(), а в candump - select(), попробую с ним.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Скорость работы модели слот-сигнал
«
Ответ #3 :
Август 28, 2014, 10:09 »
Цитата: titan83 от Август 28, 2014, 10:00
Я лишь хочу разобраться в чем именно проблема...
А я хочу вам в этом помочь.
Попробуйте сделать обработку событий как в candump и не посылайте сигнал, а просто печатайте в консоль. Посмотрите на скорость. Потом, добавьте сигналы и проверьте с ними.
Просто, я сильно сомневаюсь, что дело в сигналах. Или вы используете сигналы между потоками?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Скорость работы модели слот-сигнал
«
Ответ #4 :
Август 28, 2014, 10:32 »
И не мешало бы проверить как сильно кушается CPU.
Записан
Qt 5.11/4.8.7 (X11/Win)
titan83
Гость
Re: Скорость работы модели слот-сигнал
«
Ответ #5 :
Август 28, 2014, 11:40 »
Цитата: Old от Август 28, 2014, 10:09
А я хочу вам в этом помочь.
Спасибо за участие.
Как обычно - напишешь - поможешь себе сам)
Может кому пригодится - помимо опроса CAN у меня в программе работало еще несколько модулей, и все они базировались на общем классе, выполняющем поллинг файлов на sysfs. И ключевой функцией этого класса была QTimer::singleShot, которая вызывала слот опроса.
Проблема была в том, что у меня в качестве времени отсрочки выполнения слота стояло 0, и еще и таймаут в функции poll() стоял 100 мс, в итоге, как я понимаю, я своими singleShot (от трех-четырех объектов), забивал event loop и остальным слотам оставалось намного меньше процессорного времени.
В качестве решения я поменял отсрочку запуска слота с 0 на 50 мс и уменьшил таймаут poll() со 100 до 50 мс, теперь у меня все живут дружно.
Всем еще раз спасибо.
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Скорость работы модели слот-сигнал
«
Ответ #6 :
Август 29, 2014, 08:29 »
Цитата: titan83 от Август 28, 2014, 11:40
Как обычно - напишешь - поможешь себе сам)
Не в плане наезда, но: правильно сформулированный вопрос - и есть половина ответа. Так, что тут, действительно всё закономерно. Как и то, что в первую очередь подумали, что виноват "медленный сигнал-слот"
.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...