Poco::Util::Timer 中有关schedule和scheduleAtFixedRate的区别

5 篇文章 0 订阅

一、此处的函数原型为:

(1) void scheduleAtFixedRate(
TimerTask::Ptr pTask, long delay, long interval );
(2)void schedule(
TimerTask::Ptr pTask, Poco::Clock clock, long interval );

二、总结: 不懂得话可以用下面根据下面代码的结果进行对照分析;

(1) 当 执行时间 < 间隔时间时,则两函数功能一致,没有区别;
(2) 执行时间> 间隔时间 :
a. 调用schedule 函数的计时器,会在上一个计时器执行完后再等待 间隔时间的时长,它才开始工作;
b. 调用scheduleAtFixedRate 函数的计时器,它会在上一个计时器执行结束后立刻执行;

备注:
计时器所执行的时间为执行时间;周期性计时器唤醒时间为间隔时间。

三、代码:

#include<iostream>
#include<string>
#include<unistd.h>


#include"Poco/DirectoryIterator.h"
#include"Poco/Path.h"
#include"Poco/File.h"
#include"Poco/Stopwatch.h"
#include"Poco/Util/TimerTask.h"
#include"Poco/Util/Timer.h"

using namespace std;
using namespace Poco;
using Poco::Util::Timer;
using Poco::Util::TimerTask;
using Poco::Path;
using Poco::File;

class MyApp :public Util::TimerTask
{
	public:
		virtual	void run()
		{
			cout<<"HLlo  timer"<<endl;
			sleep(5);
			cout<<"www"<<endl;

		}
	protected:

};
int main()
{
	Util::Timer timer;
	MyApp *app=new MyApp;
	
	timer.scheduleAtFixedRate(app,5000,3000);
	//  第一次延迟5秒执行后,其后都是三秒间隔执行
	//  正常情况是 间隔三秒之后执行,可是若执行时间过长,就会推迟到执行结束再调用计时器
	//  所以每一次的计时器开始执行的时间为:分两种情况:
	// 	1  执行时间> 间隔时间 :  本次计时器的启动推迟到 上次计时器执行完后再立刻执行,记住,是立刻启动
	//	2 执行时间 <间隔时间 : 本次计时器以间隔时间为准启动
	
//	timer.schedule(app,5000,3000);
	//前一个函数是 当执行时间 > 间隔时间时,上一次执行完后本次立刻执行,
	//1 而本函数在执行时间>间隔时间时: 当上一次计时器执行结束后 再等待 间隔时间  ,然后再立刻执行;
	//2 当执行时间 <间隔时间 :以间隔时间为准周期启动	
	int i =00000;
	while(i<1000000)
	{
		cout<<"1" <<endl;
		sleep(1);
		i++;
	}
	sleep(200);
	return 0;

}
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值