这真让我烦恼,就像我之前做过的那样,大约一年前,我不能为我的生活记住那是什么图书馆。
基本上,问题在于我希望能够以指定的间隔调用方法一定次数或一段时间。
一个例子是我想从现在开始调用方法“x”,10次,每0.5秒一次。或者,从现在开始调用方法“x”,10次,直到5秒过去。
现在我觉得我使用了一个增强库来实现这个功能,但我现在似乎无法找到它并感到有些恼火。不幸的是我再也看不到代码,因为我不再拥有它了。
或者,我本可以梦想这一切,它可能是专有代码。假设没有任何东西可以做我想要的,那么目前产生这种行为的最佳方法是什么?它需要高分辨率,高达一毫秒。
它是否阻止执行它的线程无关紧要。
谢谢!
答案 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微秒的精度工作。在考虑执行被调用方法所需时间的偏差之前,准确度是几百微秒,所以绝对值得。