定时器(了解)


// 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时间的多少。时间少了就没有定时器执行,多了则都会执行。具体程序中用,还需研究。
 

定时器(了解),布布扣,bubuko.com

时间: 2024-10-21 10:36:39

定时器(了解)的相关文章

Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

原文:Android零基础入门第60节:日历视图CalendarView和定时器Chronometer 上一期学习了AnalogClock.DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chronometer. 一.CalendarView 日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触 摸来滚动日历.如果希望监控该组件的日期改变,则可调用CalendarView的 setOnDateCha

发送短信验证码按钮 定时器

static int i = 29; @property(nonatomic,strong) NSTimer *timmer;//定时器 - (void)sendNumber{ NSLog(@"发送验证码"); self.getTelephoneCodeBtn.enabled = NO; [self.getTelephoneCodeBtn setTitle:@"已发送" forState:UIControlStateDisabled]; [self.getTelep

《TCP/IP具体解释》读书笔记(22章)-TCP的坚持定时器

TCP通过让接收方指明希望从发送方接收的数据字节数(即窗体大小)来进行流量控制. 假设窗体大小为0会发生什么情况呢?这将有效阻止发送方传送数据,直到窗体变为非0为止. ACK的传输并不可靠,也就是说,TCP不正确ACK报文段进行确认,TCP仅仅确认那些包括有数据的ACK报文段. 1.坚持定时器 假设一个场景:假设一个确认丢失了,则两方就有可能由于等待对方而使连接终止,接收方等待接收数据(由于它已经向发送方通告了一个非0的窗体),而发送方在等待同意它继续发送数据的窗体更新.为防止这种死锁情况的发生

javascript-函数和定时器

1.函数自执行 JavaScript中不像C#中那样要求所有路径都有返回值,没有返回值就是undefined (function(){alert(1);}()); (function(){alert(1);})(); !function(){alert(1);}(); void function(){alert(2);}(); 2.可变参数 js函数无法像C#方法那样重载 下面的代码等于是对a函数重新定义 function a() { alert("无参函数"); } function

&lt;JavaScript&gt; 八. 定时器

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title></title> 5 <script type="text/javascript"> 6 /* 7 定时器 周期性执行JS代码 8 */ 9 10 // --------------------- 方法 ----------------------- 11 /* 12 1. setInterval(code, millisec

JavaScript定时器原理分析

.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { text-align: center; margin-top: 20px; margin-left: 10px; margin-bottom: 20px } a { cursor: pointer; text-decoration: none; color: gray } a:hover { text

workman源代码阅读 - 使用信号处理器实现定时器

<?php /** * SIGALRM信号处理器注册成功后,在什么情况下进程会收到该信号呢? * * 在Linux系统下,每个进程都有惟一的一个定时器,该定时器提供了以秒为单位的定时功能.在定时器设置的超时时间到达后,调用alarm的进程将收到SIGALRM信号. */ /** * 启动信号处理器 */ \MySignalClazz::init(); /** * 信号处理器 * @author Administrator * */ class MySignalClazz { /** * Task

关于JS中的定时器!!!

定时器: 周期性定时器 一次性定时器 1. 周期性定时器: 让程序每隔一段时间间隔,反复执行一项任务 何时使用: 只要连续,有规律的持续播放的动画 如何使用: 3件事: 1. ***任务函数: 定时器每次执行的任务 function task(){...} 任务函数通常要自己考虑:*何时停止*定时器的临界值 2. 将任务函数放入定时器,定时执行: timer=setInterval(task,interval) 其中: interval 是间隔的毫秒数 timer往往是一个全局变量: 用来保存当

如何弹出一个窗口气泡(使用定时器向上移动)

原文链接:http://blog.csdn.net/tangaowen/article/details/5108980 如何弹出一个窗口气泡 最近在工作中遇到这样一个需求,就是需要将一个窗口从右下角任务栏下面缓缓的上升到任务栏的上面,现在有很多的软件都有这样的气泡,比如:搜狗输入法的词条更新窗口,还比如CSDN的广告窗口等等. 1.首先 将要弹出的窗口移动到任务栏(当前屏幕)以下 2.然后,获得任务栏(本质是个窗口)的高度,这样就可以知道窗口最终的位置了 3.然后,计算获得窗口最终停止的位置:计

JavaScript实现绑定DOM的定时器插件

问题 使用原生的setTimeout和setInterval仅仅能够实现, 定时执行事件处理函数, 在网页开发中, 往往会出现一种情况,定时器用于定时更新某个页面区域的数据, 往往在页面加载之后, 就启动这个定时器, 往后则间隔执行此定时器. 页面上定时刷新的区域可能会动态消失, 特别是在ajax被广泛使用的今天, 如果定时刷新的区域被删除了, 则定时器材也需要自动清除掉. 此二个接口,如果实现这种效果需要, 自己维护定时器句柄, 并且在处理定时器事件函数的时候, 首先判断 指定的刷新区域是否还