Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Pavlya от Декабрь 11, 2013, 14:48



Название: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке
Отправлено: Pavlya от Декабрь 11, 2013, 14:48
Добрый день.

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

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


Название: Re: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке
Отправлено: gil9red от Декабрь 11, 2013, 14:56
Таймер начинает "тормозить" при захвате окна при перетаскивании (точнее при клике мышки в заголовок окна)

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

Если ошибся, исправьте :)


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


Название: Re: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке
Отправлено: Bepec от Декабрь 11, 2013, 15:59
У вас видимо не развязан основной поток и поток, проверяющий состояние. Скорее всего у вас синхронный вызов функции где то.


Название: Re: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке
Отправлено: Pavlya от Декабрь 11, 2013, 17:24
Да нету там никаких синхронных вызовов. Код из 20 строчек. Для эксперимента сделал то же через виндовый мультимедиа таймер. Все работает идеально. Судя по этой (http://qt-project.org/wiki/QtTimers (http://qt-project.org/wiki/QtTimers)) статье, Qt тоже использует этот таймер


Название: Re: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке
Отправлено: kuzulis от Декабрь 11, 2013, 18:11
Упрости пример.. А то какая-то залепуха получилась.. :)


Название: Re: QThread и таймер. Тормозит таймер, запущенный в отдельном потоке
Отправлено: Pavlya от Декабрь 11, 2013, 18:24
Что именно упростить? И в чем залепуха?