调用boost :: asio :: io_service ::从std :: thread运行

时间:2014-06-09 01:39:49

标签: c++ boost boost-asio

我有一个处理我的连接的类,它有一个boost :: asio :: io_service成员。我想从std :: thread调用io_service :: run(),但是我遇到了编译错误。

std::thread run_thread(&boost::asio::io_service, std::ref(m_io_service));

不起作用。我看到使用boost :: thread做这个的各种例子,但是我想坚持使用std :: thread。有什么建议?

由于

3 个答案:

答案 0 :(得分:11)

我知道有两种方法,一种是用lambda创建std :: thread。

std::thread run_thread([&]{ m_io_service.run(); });

另一种方法是使用boost :: bind

创建boost :: thread
boost::thread run_thread(boost::bind(&boost::asio::io_service::run, boost::ref(m_io_service)));

答案 1 :(得分:1)

在@ cbel的答案上​​稍微扩展一下。如果你(无论出于何种原因)想要避免使用boost :: thread和lambdas:

,另一种方法
std::thread run_thread(
    std::bind(static_cast<size_t(boost::asio::io_service::*)()>(
        &boost::asio::io_service::run), std::ref(m_io_service)));

答案 2 :(得分:0)

对我来说,标记为解决方案的答案的两个选项均会导致异常。

对我来说是什么?

boost::thread run_thread([&] { m_io_service.run(); });

代替

std::thread run_thread([&]{ m_io_service.run(); });