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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа таймера  (Прочитано 4373 раз)
DenKor29
Гость
« : Ноябрь 20, 2014, 11:22 »

Реализую задержку таким способом версия 5.3.2 (MiniGw) + QCreator

i
Код:
nt delay;
QTime time;


    time.start();
    for (;time.elapsed()<delay;)
    {
        if (rabota == StatusNone) return;
        QCoreApplication::processEvents();
    };

Идиотский вопрос какое максимальное время задержки можно реализовать таким способом ?
Как я понимаю 24 часва должны работать. Это число 86400 секунд или 86 400 000
Т.е. int имеет размер 32 бит. Максимальное время 2 147 483 648 (~590 часов)

Я прав  Непонимающий
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 20, 2014, 12:21 »

Не совсем хорошо получается с кодом.
Получается, что все 24 часа у вас процессор будет молотить.
Лучше воспользоваться концепцией сигналов и слотов. Наверное, будет лучше воспользоваться классом QTimer. К его сигналу QTimer::timeout() прикрутить необходимый слот.

Upd:

Установить задержку можно сколь угодно большой. Например, пусть таймер срабатывает каждый час, слот из некой переменной размера unsigned long long отнимает 1. Когда эта переменная обнулится - вы достигнете желаемой задержки.
« Последнее редактирование: Ноябрь 20, 2014, 12:25 от __Heaven__ » Записан
Bepec
Гость
« Ответ #2 : Ноябрь 20, 2014, 12:24 »

Максимальное время работы не ограничено при добавлении дополнительных переменных.

++ к __Heaven__.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Ноябрь 20, 2014, 12:50 »

Кстати, более читабельна конструкция
Код
C++ (Qt)
while(condition)
чем
Код
C++ (Qt)
for (;condition;)
Записан
vulko
Гость
« Ответ #4 : Ноябрь 20, 2014, 13:36 »

Недавно буквально гуглил про high resolution таймеры (в qt 5.3 у таймера появлися setprecision() метод кстати). Если не изменяет память, то для очень больших задержек погрешность очень большая.
Так для 1с задержки +- 200мс вполне может быть. График даже был там, и зависимость была больше чем линейная, что-то вроде x^const от длительности задержки.

Советую протестировать такую долгую задержку на точность.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Ноябрь 20, 2014, 13:53 »

vulko, вы случаем не об этом?
Цитировать
enum Qt::TimerType
The timer type indicates how accurate a timer can be.

Constant   Value   Description
Qt::PreciseTimer   0   Precise timers try to keep millisecond accuracy
Qt::CoarseTimer   1   Coarse timers try to keep accuracy within 5% of the desired interval
Qt::VeryCoarseTimer   2   Very coarse timers only keep full second accuracy
Записан
DenKor29
Гость
« Ответ #6 : Ноябрь 20, 2014, 14:26 »

Не совсем хорошо получается с кодом.
Получается, что все 24 часа у вас процессор будет молотить.
Лучше воспользоваться концепцией сигналов и слотов. Наверное, будет лучше воспользоваться классом QTimer. К его сигналу QTimer::timeout() прикрутить необходимый слот.

Спасибо так и сделаю.
Записан
vulko
Гость
« Ответ #7 : Ноябрь 20, 2014, 15:19 »

vulko, вы случаем не об этом?
Цитировать
enum Qt::TimerType
The timer type indicates how accurate a timer can be.

Constant   Value   Description
Qt::PreciseTimer   0   Precise timers try to keep millisecond accuracy
Qt::CoarseTimer   1   Coarse timers try to keep accuracy within 5% of the desired interval
Qt::VeryCoarseTimer   2   Very coarse timers only keep full second accuracy

угу
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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