Russian Qt Forum

Qt => Общие вопросы => Тема начата: onlik от Февраль 28, 2010, 00:42



Название: Сигнал Новый день
Отправлено: onlik от Февраль 28, 2010, 00:42
Всем привет,
Подскажите, есть ли сигнал оповещающий, что начался новый день?
Теоретически можно сделать это самому, первый просто способ, это циклом проверять текущее время (мне кажется, что это ресурсо затратно)
Второй способ, это установить таймер с интервалом 24:00:00-текущее время, но тоже проблема, если пользователь сменит время во время выполнения программы.
Какие это могут быть решения или циклом это проще всего? Не хочется, что бы у пользователя ресурсы забирались лишние, программка простенькая и висит все время в трее.


Название: Re: Сигнал Новый день
Отправлено: Alex Custov от Февраль 28, 2010, 01:06
что мешает проверять дату раз в секунду по таймеру?


Название: Re: Сигнал Новый день
Отправлено: onlik от Февраль 28, 2010, 01:49
точность нужна очень большая до миллисекунд, т.е. интервал проверки должен быть < 200-300 ms.
И как проверять? т.е. какой алгоритм.
Код:
if (hour == 00 && min == 00 && sec == 0)
раз сработает и будет постоянно срабатывать. нужно делать дополнительные проверки.


Название: Re: Сигнал Новый день
Отправлено: alexman от Февраль 28, 2010, 08:30
Так обрабатывай события по таймеру раз в 100 мс. А для проверок используй, например, QDateTime!


Название: Re: Сигнал Новый день
Отправлено: xokc от Февраль 28, 2010, 18:12
Можно проверять раз в минуту, а по мере приближения к 0:00 интервал проверки уменьшать. А после срабатывания сразу увеличить до нужной величины.


Название: Re: Сигнал Новый день
Отправлено: MoPDoBoPoT от Февраль 28, 2010, 22:03
Можно проверять раз в минуту, а по мере приближения к 0:00 интервал проверки уменьшать. А после срабатывания сразу увеличить до нужной величины.
Опять же, пользватель может изменить системное время (если только отслеживать это средствами API ОС, если это возможно, конечно).


Название: Re: Сигнал Новый день
Отправлено: SABROG от Февраль 28, 2010, 22:24
Сама ОС может менять время как минимум в двух случаях - корректировка часов по nntp, переход на летнее/зимнее время.

А из-за необходимости такой большой точности на компьютере придется поотрубать все программы, вынести проверку таймера в отдельный поток и всему этому делу присвоить реалтайм приоритет. Иначе какой-нибудь JavaScript в Firefox сожрет все ресурсы ОС и ваша программа проверит текущее состояние часов где-нибудь через пару минут.

Задача не разрешима с такими условиями.


Название: Re: Сигнал Новый день
Отправлено: onlik от Февраль 28, 2010, 23:37
сделаю интервал 500 мс и буду проверять когда h=0 m=0 s=0
спасибо всем, просто думал есть уже накатанные решения.


Название: Re: Сигнал Новый день
Отправлено: BRE от Февраль 28, 2010, 23:48
сделаю интервал 500 мс и буду проверять когда h=0 m=0 s=0
И скорее всего периодически будешь "зевать" смену даты.
Никто не гарантирует, что QTimer будет вызываться с тем интервалом который задан.
Проверять лучше изменение дата, а не наступление момента h=0 m=0 s=0.


Название: Re: Сигнал Новый день
Отправлено: onlik от Февраль 28, 2010, 23:57
точно, спасибо!