首页 > 代码库 > 定时器(了解)

定时器(了解)

// Test.cpp : 定义控制台应用程序的入口点。
//
#include "../I_Timer.H"

#include <boost/thread.hpp>

void onTimer1()
{
    std::cout << "onTimer1,it should pass 1 s!" << std::endl;
}

void onTimer2()
{
    std::cout << "onTimer2,it should pass 2 s!*****" << std::endl;
}

void onTimer_chen()
{
    std::cout << "onTimer_chen,it should pass 3 s!***************" << std::endl;
}

int main(int argc, char* argv[])
{
    
    I_TimerFactory* tf = NEW(TimerFactory);
//    auto tm01 = tf->createTimer();

#if 1
    auto myTimer1 = /*Timer::createTimer();*/tf->createTimer();
    auto myTimer2 = /*Timer::createTimer();*/tf->createTimer();
    auto myTimer_chen = /*Timer::createTimer();*/tf->createTimer();
    
    myTimer1->regTimer(boost::bind(onTimer1));
    myTimer1->setInterval(1000);
    myTimer1->start();

    myTimer2->regTimer(boost::bind(onTimer2));
    myTimer2->setInterval(2000);
    myTimer2->start();

    myTimer_chen->regTimer(boost::bind(onTimer_chen));
    myTimer_chen->setInterval(3000);
    myTimer_chen->start();
        
    //tf->driveTimer();
    for (int i=0;i<10;++i)
    {

        tf->driveTimer();
        boost::this_thread::interruptible_wait(1000);
        std::cout<<1<<std::endl;
    }
    
    std::cout << "myTimer2 stop!" << std::endl;
    std::cout << "***************" << std::endl;
    getchar();
    myTimer2->stop();
        
    for (int i=0;i<100;++i)
    {
        tf->driveTimer();
        boost::this_thread::interruptible_wait(100);
    }

    // 析构会反注册
    myTimer2 = tf->createTimer();
    myTimer2->regTimer(boost::bind(onTimer2));
    myTimer2->setInterval(2000);
    myTimer2->start();
    getchar();
    std::cout << std::endl << "123456897*" << std::endl;
#if 0
    // 也可以移入其他线程驱动
    // 不推荐,非线程安全
    boost::thread thrd([](){

        std::cout << "other thread drive!" << std::endl;
        for (int i=0;i<100;++i)
        {
            tf->driveTimer();
            boost::this_thread::interruptible_wait(100);
        }
    });
#endif    
//    thrd.join();
#endif
    std::cout << std::endl << "---------------------*" << std::endl;
    return 0;
}

一直搞不懂这个定时器怎么用的,正好程序里面有个例子,实验了一下

主要是这个drive(),这个定时器需要自己调用drive驱动

 tf->driveTimer();
 boost::this_thread::interruptible_wait(100);
interruptible_wait表示等待100ms,如果时间是100ms,就没有定时器到时间,1000ms则每次myTimer1总会执行,myTimer2,myTimer2则不一定,2000ms则myTimer1,myTimer2则每次执行,
myTimer3不一定,3000ms则三个定时器都会执行,看这个wait时间的多少。时间少了就没有定时器执行,多了则都会执行。具体程序中用,还需研究。