zoukankan      html  css  js  c++  java
  • 定时器(了解)

    // 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时间的多少。时间少了就没有定时器执行,多了则都会执行。具体程序中用,还需研究。
     
  • 相关阅读:
    android architecture
    java求解两个字符串之间的编辑距离
    URL和URI的区别
    java源码解析之qdox
    java中Random实现原理
    java中ThreadLocal入门
    java中多线程之Future入门
    java中类加载器入门
    java中正则表达式的group用法
    java反射调用main方法踩坑
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3704676.html
Copyright © 2011-2022 走看看