以下是一位同事提出的问题,在互联网上搜索并没有找到一个好的答案后,这似乎是一个很好的问题:
我在嵌入式代码中使用POCO计时器(在Linux上运行)。计时器是Foundation组件的一部分。定时器有三个基本功能:
Timer.start();
Timer.stop();
Timer.restart();
我试图停止然后重新启动我的计时器,我无法让它工作......我已经查看了所有POCO示例和示例,并且没有任何用于timer.restart( )。
有没有人对此有任何见解,或者是一个停止并重新启动计时器的工作代码示例?即使回调函数没有运行,定时器也会启动和停止,但重启似乎不起作用。
答案 0 :(得分:4)
好的,自从提出这个问题后,我就继承了我的同事项目并自己找到了答案。
//use restart for an already running timer, to restart it
Timer.restart();
如果您的计时器已经停止并且您需要重新启动,则需要首先重置周期性间隔,以下是Poco示例,其中添加了我自己的几行。这会编译并重新启动计时器。
#include "Poco/Timer.h"
#include "Poco/Thread.h"
#include "Poco/Stopwatch.h"
#include <iostream>
using Poco::Timer;
using Poco::TimerCallback;
using Poco::Thread;
using Poco::Stopwatch;
class TimerExample
{
public:
TimerExample()
{
_sw.start();
}
void onTimer(Timer& timer)
{
std::cout << "Callback called after " << _sw.elapsed()/1000 << " milliseconds." << std::endl;
}
private:
Stopwatch _sw;
};
int main(int argc, char** argv)
{
TimerExample example;
TimerCallback<TimerExample> callback(example, &TimerExample::onTimer);
Timer timer(250, 500);
timer.start(callback);
Thread::sleep(5000);
timer.stop();
std::cout << "Trying to restart timer now" << std::endl;
timer.setStartInterval(250);
timer.setPeriodicInterval(500);
timer.start(callback);
Thread::sleep(5000);
timer.stop();
return 0;
}