首页 > 代码库 > 定时器

定时器

定时器,这个是项目中很多地方用的,AI,所有的技能定时都是用的这个,很久就像看他了,但没有看,今天看了下现在明白只要是经理写的东西都很饶人这个定时器也是通过计算时间定时的调用,用的是boost里面的QueryPerformanceCounter跟cpu中定时器有关系估计这个精度是相当的高了,获取系统的时时时间这个是需要硬件支持的比GetTickCount精度要高,这个函数有18ms的问题,应该系统18ms发送一次,不是时时的。都说这个是工厂模式,但我看这个不是啥工厂模式,只是感觉像工厂模式//TimerFactory里面保存了这个结构体struct mark_t{    int            Id;    bool        State;            //是否开始    int            Interval;        //时间间隔    std::function<void()>        Event;//绑定的函数    std::shared_ptr<timer_ex>    Timer;//高精度定时器};int main(int argc, char* argv[]){        I_TimerFactory* tf = NEW(TimerFactory);    /*    Timer_imp里面有一个TimerFactory指针,然后直接操作这个TimerFactory指针,经理写的东西都很饶人    */    //每一个Timer_imp里面都有一个时间工厂的指针,将这个指针设置成tf    auto myTimer1 = tf->createTimer();    auto myTimer2 = tf->createTimer();    auto myTimer_chen = tf->createTimer();        //向时间工厂变量mark中添加变量包括id,状态,事件,时间等,还是针对这个tf做一些事情    myTimer1->regTimer(boost::bind(onTimer1));    //设定mark相应变量的时间    myTimer1->setInterval(10000);    //设定mark相应变量的状态    myTimer1->start();    myTimer2->regTimer(boost::bind(onTimer2));    myTimer2->setInterval(20000);    myTimer2->start();    myTimer_chen->regTimer(boost::bind(onTimer_chen));    myTimer_chen->setInterval(30000);    myTimer_chen->start();            for (int i=0;i<100;++i)    {        tf->driveTimer();//这个经常放到一个线程里面进行调用        boost::this_thread::interruptible_wait(1000);    }        std::cout << "myTimer2 stop!" << std::endl;    std::cout << "***************" << std::endl;    //getchar();    myTimer2->stop();            for (int i=0;i<100;++i)    {        tf->driveTimer();//可以移动到其他线程进行驱动,但不安全,但项目里面都是在其他线程驱动,我想定时器在驱动之前是不会再创建的,里面主要是有个公共的变量_mask        boost::this_thread::interruptible_wait(100);    }    // 析构会反注册,说的这么玄乎,其实就是从那个mask里面erase掉    myTimer2 = tf->createTimer();    myTimer2->regTimer(boost::bind(onTimer2));    myTimer2->setInterval(2000);    myTimer2->start();    getchar();    std::cout << std::endl << "123456897*" << std::endl;}之前说搞个定时器很费效率,我看没什么,主要是驱动是在哪里

 

定时器