Какова альтернатива QTimer?

Функция слота QTimer::start имеет интервал в миллисекунды:

Запускает или перезапускает таймер с интервалом ожидания в миллисекундах.

Но мс относится к типу int и не может занимать большой интервал. Какова альтернатива QTimer, которая может занять много времени?


person Kate    schedule 20.06.2020    source источник
comment
Какой интервал вам нужен? Обычно int будет 32-битным целым числом и может представлять примерно 2 миллиарда миллисекунд — это более 20 дней.   -  person G.M.    schedule 20.06.2020
comment
@G.M. Мне нужен годичный период.   -  person Kate    schedule 20.06.2020


Ответы (1)


В этом случае вы можете использовать что-то вроде почасового таймера, связанного с функцией или лямбдой, которая проверяет текущую временную точку относительно цели...

/*
 * We want to trigger some event one year from now.
 */
auto endpoint = QDateTime::now().addYears(1);
QTimer hourly_timer;
QObject::connect(&hourly_timer, &QTimer::timeout,
                 [endpoint]()
                   {
                     if (QDateTime::now() >= endpoint) {

                       /*
                        * Target time reached.  Do whatever...
                        */
                     }
                   });
hourly_timer.start(3600 * 1000);
person G.M.    schedule 20.06.2020
comment
Спасибо, но это похоже на очень плохой код. boost.asio.Timer делать именно то, что я хочу. Но для boost.asio.Timer нужен другой цикл событий, который мне как-то не нравится. - person Kate; 20.06.2020
comment
Могу я спросить, что в этом «действительно плохого»? Обновление кода тайм-аута по таймеру (будь то ежечасно, в секунду или что-то еще) является довольно стандартным. Кроме того, тайм-аут в 1 год кажется странным/оптимистичным. Действительно ли платформа, на которой он работает, имеет ожидаемое время безотказной работы так долго? Даже системы с высокой доступностью могут иметь простои в течение нескольких секунд в течение года. - person G.M.; 20.06.2020
comment
@GM, моя программа, реализующая планировщик с QTimer, может быть очень сложной из-за того, что вы мне предлагаете. - person Kate; 20.06.2020
comment
Хорошо, это достаточно справедливо, но... в определенной степени это делает проблему xy. Возможно, вы захотите отредактировать свой вопрос, чтобы уточнить реальную проблему, которую вы пытаетесь решить, - планировщик. - person G.M.; 20.06.2020