4

同僚から次のように尋ねられました。インターネットをいろいろ調べたところ、適切な回答が見つからなかったので、ここで良い質問のように思えました。

組み込みコード (Linux で実行) で POCO タイマーを使用しています。タイマーは Foundation コンポーネントの一部です。タイマーには 3 つの基本的な機能があります。

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

タイマーを停止して再起動しようとしていますが、機能しません... ...すべてのPOCOサンプルと例を見てきましたが、timer.restart()には何もありません。

誰かがこれについて何か洞察を持っていますか、またはタイマーを停止して再起動する実際のコード例はありますか? コールバック関数が実行されていなくても、タイマーは開始および停止しますが、再起動は機能していないようです。

4

1 に答える 1

7

この質問をして以来、私は同僚のプロジェクトを継承し、自分で答えを見つけました。

//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;
 }
于 2014-04-28T20:30:32.173 に答える