【发布时间】:2013-09-13 17:57:16
【问题描述】:
我开始使用 Boost,所以可能是我搞砸了。
我正在尝试使用 boost (ASIO) 设置 http 服务器。我从文档中获取了代码:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/examples/cpp03_examples.html(HTTP Server,第一个)
与示例的唯一区别是我通过自己的方法“run”运行服务器并在后台线程中启动 io_service,如在文档中:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/io_service.html
boost::asio::io_service::work work(io_service_);
(我也正在从我的运行方法中停止 io_service。)
当我启动这个修改后的服务器时,一切似乎都正常,运行方法工作正常。但是后来我试图从服务器获取一个文档,请求挂起并且控制流永远不会到达“request_handle”方法。 我错过了什么吗?
UPD。这是我的运行方法代码:
void NetstreamServer::run()
{
LOG4CPLUS_DEBUG(logger, "NetstreamServer is running");
boost::asio::io_service::work work(io_service_);
try
{
while (true)
{
if (condition)
{
io_service_.stop();
break;
}
}
}
catch (std::exception const& e)
{
LOG4CPLUS_ERROR(logger, "NetstreamServer" << " caught exception: " << e.what());
}
}
【问题讨论】:
-
io_service_.run()在哪里? -
可能是我误解了文档 (boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/…),但 AFAIU 因为我正在创建“工作”对象,所以我不需要这个。
-
Work 对象仅确保
io_service::run不会退出(引用您的链接:"这确保 io_service 对象的 run() 函数在工作进行时不会退出,并且当没有未完成的工作时,它会退出。”)。但是如果你不打电话给io_service::run,没有人会为你这样做。 -
好的,谢谢,我明白了。
标签: c++ http boost boost-asio