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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке  (Прочитано 6111 раз)
Pavlya
Гость
« : Декабрь 11, 2013, 14:48 »

Добрый день.

Нужно решить следующую задачу: по таймеру с периодом в 1 ms совершать опрос состояния линии DTR последовательного порта. Операционная система - Win

Для этого я создаю отдельный тред с высоким приоритетом и запускаю в нем таймер. Все отлично работает. Период поллинга измеряю с помощью QElapsedTimer. Таймер начинает "тормозить" при захвате окна при перетаскивании (точнее при клике мышки в заголовок окна). Почему так происходит? Таймер ведь запущен в отдельном треде со своим циклом обработки событий. В архиве пример проекта.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Декабрь 11, 2013, 14:56 »

Таймер начинает "тормозить" при захвате окна при перетаскивании (точнее при клике мышки в заголовок окна)

Уже поднималась подобная тема, и сообщалось, что в винде, при перетаскивании окна, оконный менеджер приостанавливает процесс.

Если ошибся, исправьте Улыбающийся
Записан

Pavlya
Гость
« Ответ #2 : Декабрь 11, 2013, 15:28 »

Не сделал wrapper->moveToThread(thread); (Хотя в "боевом" коде это делаю). Проблема осталась, проявляется только при других условиях. Таймер начинает тормозить при наведении мышки на активный эскиз приложения в панели задач (Заумно звучит, более понятно на скриншоте).
Записан
Bepec
Гость
« Ответ #3 : Декабрь 11, 2013, 15:59 »

У вас видимо не развязан основной поток и поток, проверяющий состояние. Скорее всего у вас синхронный вызов функции где то.
Записан
Pavlya
Гость
« Ответ #4 : Декабрь 11, 2013, 17:24 »

Да нету там никаких синхронных вызовов. Код из 20 строчек. Для эксперимента сделал то же через виндовый мультимедиа таймер. Все работает идеально. Судя по этой (http://qt-project.org/wiki/QtTimers) статье, Qt тоже использует этот таймер
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Декабрь 11, 2013, 18:11 »

Упрости пример.. А то какая-то залепуха получилась.. Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Pavlya
Гость
« Ответ #6 : Декабрь 11, 2013, 18:24 »

Что именно упростить? И в чем залепуха?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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