概述
最近在工作上需要用到定时器,然后看到boost里面的deadline_timer可以实现一个定时器,所以就直接将其封装成了ATimer类,方便使用,ATimer有以下优点:
- 可以支持纳秒、毫秒、秒、分、小时定时。
- 可以随时停止定时器。
- 支持单次调用。
- 因为使用了deadline_timer,所以定时比较准确。
ATimer和Qt的QTimer使用方法类似,若没有类似的Timer类,使用最原始的方法,我们的代码可能会是这样的:
m_timerThread = std::thread([this]
{
while (!m_bThreadStoped)
{
++m_sleepCount;
Sleep(SLEEP_DURATION_TIME);
if (m_sleepCount == m_sleepAllCount)
{
m_sleepCount = 0;
doSomeThing();
}
}
});
若使用QTimer的话,书写是这样的:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
再来看看ATimer的使用:
ATimer<> t;
t.bind([]{ std::cout << "Hello C++" << std::endl; });
t.start(1000);
从上面的例子可以看到,QTimer和ATimer的使用都非常方便,接下来看看ATimer的具体实现:
下面是ATimer的具体使用例子:
from:http://www.cnblogs.com/highway-9/p/5737421.html