Russian Qt Forum

Qt => Общие вопросы => Тема начата: DenKor29 от Ноябрь 20, 2014, 11:22



Название: Работа таймера
Отправлено: 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 часов)

Я прав  ???


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

Upd:

Установить задержку можно сколь угодно большой. Например, пусть таймер срабатывает каждый час, слот из некой переменной размера unsigned long long отнимает 1. Когда эта переменная обнулится - вы достигнете желаемой задержки.


Название: Re: Работа таймера
Отправлено: Bepec от Ноябрь 20, 2014, 12:24
Максимальное время работы не ограничено при добавлении дополнительных переменных.

++ к __Heaven__.


Название: Re: Работа таймера
Отправлено: __Heaven__ от Ноябрь 20, 2014, 12:50
Кстати, более читабельна конструкция
Код
C++ (Qt)
while(condition)
чем
Код
C++ (Qt)
for (;condition;)


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

Советую протестировать такую долгую задержку на точность.


Название: Re: Работа таймера
Отправлено: __Heaven__ от Ноябрь 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


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

Спасибо так и сделаю.


Название: Re: Работа таймера
Отправлено: vulko от Ноябрь 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

угу