この質問をして以来、私は同僚のプロジェクトを継承し、自分で答えを見つけました。
//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;
}