我正在编译boost::asio示例:
http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/examples.html#boost_asio.examples.http_server_3

它应该是多线程服务器实现。

现在,在async_read处理程序中,我打印一条消息并休眠30秒。我在两个浏览器中打开localhost,然后看到一次handle_read被调用,然后30秒钟没有任何反应,最后再次调用了handle_read。

使用5个线程调用io_Service.run。

为什么不同时调用处理程序?例如为什么要在调用第二个handle_read之后等待第一个handle_read完成?

最佳答案

它有助于发布代码。当我对asio示例使用此修改时:

void connection::handle_read(const boost::system::error_code& e,
    std::size_t bytes_transferred)
{
  std::cerr << "connection::handle_read()\n";
  boost::this_thread::sleep(boost::posix_time::seconds(10));
  std::cerr << "connection::handle_read() done sleep\n";
  if (!e)
  {

它按预期工作,即
$ ./test 0.0.0.0 7777 5 .
connection::handle_read()
connection::handle_read()
connection::handle_read() done sleep
connection::handle_read() done sleep

您如何“睡眠30秒”?也许您使用的sleep函数会暂停进程中的所有线程?

关于c++ - Boost::asio并发(?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6649714/

10-10 09:16