Poco::Timer的start函数和restart函数在刚接触的时候很容易产生误解。我们通过回调函数onTimer执行一些任务时,当任务完成时关掉定时器。关掉定时必需使用stop函数,然而不能在回调函数中调用该函数,否则会发生死锁。个人感觉restart(0),并不会结束timer开启的线程,所以再次start的时候会出错。
class A
{
public:
void ontime(Poco::Timer& t)
{
std::cout << "#whj: ontime(Poco::Timer& t)\n";
}
};
int main(int argc, char** argv)
{
A a;
Poco::Timer timer(0,1000);
timer.start(Poco::TimerCallback<A> (a, &A::ontime)); //开启定时器
sleep(7);
timer.stop(); //再次开启timer必须要stop。
sleep(2);
std::cout << "#whj: timer.restart();===========================\n";
timer.setStartInterval(3000);
timer.setPeriodicInterval(1000); //再次开启前要先设置执行频率,否则只执行一次
timer.start(Poco::TimerCallback<A>(a, &A::ontime));
sleep(8);
std::cout << "#whj: ===============******============\n";
timer.restart(); //启动8s后,重新开始运行timer. 不可在timer调用start之前调用restart,否则会出错
sleep(5);
timer.stop();
std::cout << "#whj: timer.restart(1000);===========================\n";
timer.start(Poco::TimerCallback<A>(a, &A::ontime));
timer.restart(2000); //timer运行后,修改执行频率
sleep(15);
timer.stop();
}
Ok! that is all !!