Russian Qt Forum
Ноябрь 25, 2024, 20:51
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
timeBeginPeriod и timeEndPeriod
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: timeBeginPeriod и timeEndPeriod (Прочитано 9328 раз)
¤Se®ega¤
Гость
timeBeginPeriod и timeEndPeriod
«
:
Апрель 09, 2009, 11:17 »
Мне необходимо запускать определенный метог с частотой примерно 50 раз в секунду ( 20 мс), с помощью обычного таймера такой частоты не достичь,либо больше либо меньше. Слышаб об использовании timeBeginPeriod и timeEndPeriod? но только слышал, хотел бы узнать как это использовать, ну или если кто знает ка достичь такой частоты другими средствами?
Записан
Rcus
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #1 :
Апрель 09, 2009, 11:28 »
А почему не достичь? В доках по QTimer говорится о разрешении в 1 милисекунду на большинстве платформ.
Записан
¤Se®ega¤
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #2 :
Апрель 10, 2009, 01:56 »
ну я в том смысле что если использовать таймер и запускать по нему какое нибудь событие каждые 20мс, то по идее это событие исполнится 50 раз за секунду.Но в реале частота будет порядка 33 fps.Такая же частота будет если запускать метод таймером в диапазон 17-31мс.
Проверяю просто:
slot_timer1() // тот что 20 мс
{
visible=!visible;
ui.pushButton->setVisible(visible);
counter++;
}
slot_timer2() //тот что раз в секунду
{
ui.spinBox->setValue(counter);
counter=0;
}
Записан
¤Se®ega¤
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #3 :
Апрель 10, 2009, 04:25 »
Как говориться сам пошутил сам и посмеялся.Посидел тут посидел и придумал.Правда не знаю правильно ли.Я в первом таймере делаю Sleep(20), тоесть за 1 секунду метод по таймеру исполняется 50 раз (- время на обработку оставшегося в методе),итого получается порядка 49fpsюПроверяю через программу fraps, выдает тоже самое, но гораздо быстрее.
Я понимаю что это все равно что пальцем в небо попасть.Но кто что скажет?
Записан
IMPOMEZIA
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #4 :
Апрель 10, 2009, 12:01 »
Цитата: Rcus от Апрель 09, 2009, 11:28
А почему не достичь? В доках по QTimer говорится о разрешении в 1 милисекунду на большинстве платформ.
Windows к большинству не относится.
¤Se®ega¤
Есть тема где подробно освещены проблемы таймеров, вкратце разрешение стандартного таймера в винде ~15,6 мс.
http://www.forum.crossplatform.ru/index.php?showtopic=2429&pid=17879&st=0
Записан
Rcus
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #5 :
Апрель 10, 2009, 12:15 »
Так давайте определимся мы говорим о стандартных виндовых таймерах или о QTimer? В модифицированной демке widgets/wiggly под WindowsXP выдает до 999 срабатываний таймера.
Чтение ./src/corelib/kernel/qeventdispatcher_win.cpp помогает в понимании сего феномена: при интервале более 10 мс используется стандартный таймер, а при меньших - из winmm
«
Последнее редактирование: Апрель 10, 2009, 12:19 от Rcus
»
Записан
¤Se®ega¤
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #6 :
Апрель 10, 2009, 13:33 »
Мне как то все равно что QTimer что таймеры,суть одна: надо определенным образом задвать период работы метода,так, чтобы он работал с частотой порядка 50 fps, хоть через цыкли, если их написать так, чтобы они везде работали одинако(что навряд ли).
Записан
kitov
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #7 :
Апрель 10, 2009, 18:14 »
Можно отдельную нить запустить с sleep-ом .
У меня были проблемы с таймером в Вин2000 , не помню какой версии была Qt , таймер срабатывал очень медленно .
Тролли сказали что всё нормально ибо таймеры ОС-зависимы .
Записан
IMPOMEZIA
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #8 :
Апрель 10, 2009, 18:24 »
QBasicTimer
и
QTimer
используют
int QObject::startTimer ( int interval )
, в описании которого:
Цитировать
Most platforms support an accuracy of 20 milliseconds; some provide more.
Не стыковка в документации получается.
«
Последнее редактирование: Апрель 10, 2009, 18:27 от IMPOMEZIA
»
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #9 :
Апрель 10, 2009, 22:59 »
Цитата: ¤Se®ega¤ от Апрель 10, 2009, 13:33
Мне как то все равно что QTimer что таймеры,суть одна: надо определенным образом задвать период работы метода,так, чтобы он работал с частотой порядка 50 fps, хоть через цыкли, если их написать так, чтобы они везде работали одинако(что навряд ли).
сделай тогда цикл, в основной ветке или в потоке как сказали. Внутри цикла рассчитывай время отработки нужных методов, и потом sleep на 50-[рассчитанное время], если [рассчитанное время] < 50. И не стоит забывать, что sleep(n) необязательно проспит n указанных единиц времени. OS-specific опять же.
Записан
¤Se®ega¤
Гость
Re: timeBeginPeriod и timeEndPeriod
«
Ответ #10 :
Апрель 11, 2009, 01:50 »
Да я уже сделал через sleep.запустил 2 таймера: первый просто start(), второй start(1000), и привязал первый таймер к методу в котором делаю sleep(19), таким образом получается что за 1 секунду метод выполняется не более 1000/19 (52,6) раз.плюс затраченное время на обработку данных в методе.Коряво, но мне особо и не надо ,надеюсь ))).
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...