【发布时间】:2019-12-19 15:56:31
【问题描述】:
我想用 boost::asio::deadline_timer 创建一个 Timer 类。我调查了这个: How do I make the boost/asio library repeat a timer?
class DeadlineTimer
{
boost::asio::io_service io;
std::function<void()> fun;
boost::asio::deadline_timer t;
void runTimer()
{
fun();
t.expires_at(t.expires_at() + boost::posix_time::seconds(2));
t.async_wait(boost::bind(&DeadlineTimer::runTimer, this));
}
public:
DeadlineTimer() :t(io, boost::posix_time::seconds(2)){}
void setFunction(std::function<void()> _f)
{
fun = _f;
}
void run()
{
io.run();
}
};
void test()
{
DeadlineTimer timer1;
auto f = []() {
cout << "hello world\n";
};
timer1.setFunction(f);
timer1.run();
}
它允许用户通过timer1.setFunction(f); 传递一个自定义的定时器函数。然后重复运行它(在当前情况下每 2 秒运行一次)。
但它不起作用,根本没有输出。
【问题讨论】:
-
你没有在这段代码的任何地方调用
runTimer,那么你希望这个计时器如何启动? -
在分配了
fun之后,在setFunction中添加runTimer()。 -
@rafix07,哦,天哪,我才意识到。谢谢。
-
@rafix07,是的,效果很好,再次感谢。