1

这真的让我很烦,因为我以前做过,大约一年前,我一生都记不起它是什么图书馆。

基本上,问题是我希望能够以指定的时间间隔调用某个方法一定次数或一段时间。

一个例子是我想从现在开始调用一个方法“x”,10 次,每 0.5 秒一次。或者,从现在开始调用方法“x”,10 次,直到 5 秒过去。

现在我以为我为这个功能使用了一个 boost 库,但我现在似乎找不到它,感觉有点恼火。不幸的是,我不能再看代码了,因为我不再拥有它了。

或者,我本可以梦想这一切,它可能是专有代码。假设没有任何东西可以满足我的需求,那么目前产生这种行为的最佳方式是什么?它需要高分辨率,最高可达一毫秒。

它是否阻塞执行它的线程都没有关系。

谢谢!

4

3 回答 3

4

也许您正在谈论boost::asio。它主要用于联网,但也可用于调度定时器。

它可以与 boost::threads 结合使用。

于 2010-05-31T22:10:04.833 回答
1

boost::this_thread::sleep 和 boost::datetime 中的持续时间的组合?

于 2010-05-29T07:49:26.837 回答
1

回答您自己的问题可能是不好的做法,但我想在 Nikko 建议的内容中添加更多内容,因为我没有使用两个建议的库实现该功能。有人可能会在某些时候发现这很有用。

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 回答