Poco定时器示例

时间:2013-09-26 15:17:44

标签: c++ linux timer poco

以下是一位同事提出的问题,在互联网上搜索并没有找到一个好的答案后,这似乎是一个很好的问题:

我在嵌入式代码中使用POCO计时器(在Linux上运行)。计时器是Foundation组件的一部分。定时器有三个基本功能:

Timer.start();
Timer.stop();
Timer.restart();

我试图停止然后重新启动我的计时器,我无法让它工作......我已经查看了所有POCO示例和示例,并且没有任何用于timer.restart( )。

有没有人对此有任何见解,或者是一个停止并重新启动计时器的工作代码示例?即使回调函数没有运行,定时器也会启动和停止,但重启似乎不起作用。

1 个答案:

答案 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;
 }