一、此处的函数原型为:
(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;
}