Timer定时器开发
定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期。
参考:https://github.com/sogou/workflow
定时器的创建
同样是在WFTaskFactory类里的方法:
using timer_callback_t =
std::function<void (WFTimerTask*)>;
class WFTaskFactory
{
…
static WFTimerTask *create_timer_task(unsigned int microseconds,
timer_callback_t callback);
};
第一个参数为定时时间,单位为微秒。除了程序退出,定时器不可以提前结束。
定时器任务里同样有user_data域可以用来传递一些用户数据。启动方法和接入任务流的方法与其它任务没有区别。
定时器的一个高级特征
在关于程序退出里讲到,main函数结束或exit()被调用的时候,所有任务必须里运行到callback,并且没有新的任务被调起。
这们就可能出现一个问题,定时器的最长定时时间超过了1小时,并且不能主动打断。如果等定时器到期,程序退出需要很长时间。
而实现上,程序退出是可以打断定时器,让定时器回到callback的。如果定时器被程序退出打断,get_state()会得到一个WFT_STATE_ABORTED状态。
当然如果定时器被程序退出打断,则不能再调起新的任务。
以下这个程序,每间隔一秒抓取一个一个h