在C ++中以特定的间隔速率调用方法

时间:2010-05-29 07:41:32

标签: c++ boost methods timer scheduler

这真让我烦恼,就像我之前做过的那样,大约一年前,我不能为我的生活记住那是什么图书馆。

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

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

现在我觉得我使用了一个增强库来实现这个功能,但我现在似乎无法找到它并感到有些恼火。不幸的是我再也看不到代码,因为我不再拥有它了。

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

它是否阻止执行它的线程无关紧要。

谢谢!

3 个答案:

答案 0 :(得分:4)

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

它可以与boost :: threads一起使用。

答案 1 :(得分:1)

boost :: this_thread :: sleep和boost :: datetime?

中的持续时间的组合

答案 2 :(得分: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微秒的精度工作。在考虑执行被调用方法所需时间的偏差之前,准确度是几百微秒,所以绝对值得。