获取整分钟触发事件
如果您想要确保某个操作在每个新的分钟开始时尽可能准确地执行,最好的方法是使用一个定时器,并在每分钟的开始时重新校准它。这样可以减少累积误差,并确保操作在长时间运行后仍然同步。
以下是一个使用Qt的示例,它创建了一个QTimer,它会在每分钟的开始时调用一个函数,并在函数执行后重新计算下一次触发的时间。
#include <QTimer>
#include <QDateTime>
#include <QObject>
class MinuteTimer : public QObject {
Q_OBJECT
public:
MinuteTimer(QObject *parent = nullptr) : QObject(parent), timer(new QTimer(this)) {
// 连接定时器的信号到槽函数
connect(timer, &QTimer::timeout, this, &MinuteTimer::onNewMinute);
// 启动定时器
rescheduleTimer();
}
private slots:
void onNewMinute() {
// 每分钟开始时执行的操作
qDebug() << "A new minute has started!";
// 重新计划下一次触发
rescheduleTimer();
}
private:
QTimer *timer;
void rescheduleTimer() {
// 获取当前时间
QTime currentTime = QTime::currentTime();
// 计算到下一个整分需要等待的时间(毫秒)
int millisecondsToWait = (60 - currentTime.second()) * 1000 - currentTime.msec();
// 如果已经非常接近下一分钟(例如,100毫秒内),则等待整整一分钟
if (millisecondsToWait < 100) {
millisecondsToWait += 60000;
}
// 重新设置定时器
timer->start(millisecondsToWait);
}
};
// 在某个适当的地方(如主函数或某个类的构造函数中)创建MinuteTimer实例
// MinuteTimer *minuteTimer = new MinuteTimer(parent);