背景:
在实际中
1.我们往往需要给执行某个业务请求设置等待时间(超时时间),eg:网络请求数据包、进度条等;
2.需要定时执行每个任务,eg钟表每天定时报时,就想人每天12:00吃中午饭,大脑给身体设置的定时任务;
3.有些事情需要特定的时间执行,eg:笔者明天早上需要五点起床,赶第一班航班去某个地方,那当然起码得设置一个两点左右的闹钟,不至于误机;
这些看起来简单的事情其实映射到程序世界来都需要定时看护,那定时器,是一个不错的选择;
#include "mainwindow.h"
#include <QDebug>
#include <QDateTime>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
timer.setSingleShot(true);
qInfo() << QDateTime::currentDateTime().toString() << timer.isActive();
connect(&timer, &QTimer::timeout, [=](){
qInfo() << QDateTime::currentDateTime().toString() << timer.isActive();
timer.start();
if (timer.isActive())
timer.stop();
timer.start(2000);
});
timer.start(5000);
}
MainWindow::~MainWindow()
{
}
QTimer可以设置只启动一次(setSingleShot是一个不错的选择)【eg:https进行post请求访问数据时可以设置一个8s的定时器,如果一旦超时,然后就加载本地数据;】
如果需要定时定点执行某个任务那就不需要该方法了;
另外如果定时器运行期间需要改变定时器的超时间隔setInterval是一个不错的选择;
具体方法很多,可以参考qt 帮助手册;
这里提醒的是,虽然使用简单,但是在使用前一定要想好,充分模拟让定时器触发的场景,考虑全面,如果存在漏洞,某些业务可能执行不到或者一直执行,这对整个程序是致命的,谁失误过谁明白;