如何调用boost :: asio异步函数

时间:2013-05-28 14:09:43

标签: c++ boost boost-asio

我想在异步调用中使用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相同的语法,我认为它会起作用。

1 个答案:

答案 0 :(得分: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)以确保计时器确实已过期。