阅读了Boost.Asio教程和文档,在我看来,以下main()函数不应该返回:
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
boost::system::error_code ec;
io_service.run(ec);
std::cout << ec.value() << " - " << ec.message() << std::endl;
return 0;
}
我已经分配了它的工作并期望run()阻塞,直到工作被销毁 - 在最小的可行演示中,直到run()返回后才会发生。
然而,程序立即返回,显示“0 - 成功”。这似乎不对。
我在一个单独的线程中使用io_service.run()尝试了一个更复杂的例子之后遇到了这个问题,而且也没有按预期工作。因此,检测和避免死锁情况的特殊情况似乎不太可能。
我做了一些根本错误的事吗?这是Ubuntu(14.04)Boost库中的错误吗?关于如何调试或找出问题的想法?