我有一个处理我的连接的类,它有一个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。有什么建议?
由于
答案 0 :(得分:11)
我知道有两种方法,一种是用lambda创建std :: thread。
std::thread run_thread([&]{ m_io_service.run(); });
另一种方法是使用boost :: bind
创建boost :: threadboost::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(); });