0

我想在我的异步调用中使用 boost::asio deadline_timer。我想在调用对象上调用函数 A::fun(0)。要做到这一点,我会这样做:

io_service io;
deadline_timer timer(io, boost::posix_time::seconds(10));
timer.async_wait(&A::fun, this, 0); //error
io.run();

在第二行我得到错误: basic_deadline_timer::async_wait(const WaitHandler &)' : 期望 1 个参数 - 2 个提供。

我在某些任务上使用了与启动 boost::threads 相同的语法,我认为它会起作用。

4

1 回答 1

3

您需要传递一个满足WaitHandler要求的函数对象;也就是说,它接受错误代码作为其参数。

在 C++11 中,我会使用 lambda:

timer.async_wait([this](const boost::system::error_code &){fun(0);});

在 C++03 中,使用 Boost.Bind 创建一个函数对象:

timer.async_wait(bind(&A::fun, this, 0));

无论哪种情况,您都可能希望检查传递的错误代码(在第二种情况下,通过修改或包装fun)以确保计时器确实已过期。

于 2013-05-28T14:32:45.583 回答