1

これは、約1年前に行ったことがあり、それがどのライブラリであったかを一生思い出せないので、本当に迷惑です。

基本的に、問題は、メソッドを特定の回数または特定の期間、指定された間隔で呼び出すことができるようにしたいということです。

1 つの例として、メソッド "x" を今から 0.5 秒ごとに 10 回呼び出したいとします。または、メソッド「x」を今から 5 秒経過するまで 10 回呼び出します。

この機能にブースト ライブラリを使用したと思ったのですが、今は見つからないようで、少しイライラしています。残念ながら、コードを所有していないため、コードをもう一度見ることはできません。

あるいは、これをすべて夢見て、それが独自のコードだった可能性もあります。私が望むことをするものが何もないと仮定すると、現在、この動作を生成する最良の方法は何ですか? ミリ秒までの高解像度である必要があります。

実行元のスレッドをブロックするかどうかは問題ではありません。

ありがとう!

4

3 に答える 3

4

たぶん、あなたはboost::asioについて話しているでしょう。主にネットワーキングに使用されますが、タイマーのスケジューリングにも使用できます。

boost::threads と組み合わせて使用​​できます。

于 2010-05-31T22:10:04.833 に答える
1

あなた自身の質問に答えるのはおそらく悪い習慣ですが、私は2つの提案されたライブラリで機能を実装していないので、日光が提案したものにさらに何かを追加したいと思いました。誰かがこれがいつか役に立つと思うかもしれません。

void SleepingExampleTest::sleepInterval(int frequency, int cycles, boost::function<void()> method) {
    boost::posix_time::time_duration interval(boost::posix_time::microseconds(1000000 / frequency));
    boost::posix_time::ptime timer = boost::posix_time::microsec_clock::local_time() + interval;

    boost::this_thread::sleep(timer - boost::posix_time::microsec_clock::local_time());

    while(cycles--) {
        method();

        timer = timer + interval;
        boost::this_thread::sleep(timer - boost::posix_time::microsec_clock::local_time());
    }
}

うまくいけば、私がノックアップしたこの簡単な例を人々が理解できるでしょう。柔軟性を持たせるためだけにバインドされた関数を使用する。

私のマシンでは約50マイクロ秒の精度で動作しているようです。呼び出されるメソッドの実行にかかる時間の偏りを考慮する前は、精度は数百マイクロ秒だったので、間違いなく価値があります。

于 2010-05-31T21:36:03.027 に答える
1

boost::this_thread::sleep と boost::datetime? で見つかった期間の組み合わせ

于 2010-05-29T07:49:26.837 に答える