c++ - Boost::asio 并发(?)

标签 c++ boost concurrency boost-asio

我正在编译 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 完成?

最佳答案

有助于发布代码。当我对 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/

相关文章:

c++ - 在 QListView 中选择索引

linux - 如何使用 gcc 的自定义位置在 Linux 上安装 boost?

java - 指令重新排序和发生之前的关系

python-2.7 - 在每个域上以高并发和低请求率执行 Scrapy 广泛抓取。

java - 无法解决与Java Threads相关的教科书示例

C++,关于继承的基础知识

c++ - 在 Qt/QML 中显示错误消息

c# - 从 ASP.NET webservice 调用有状态的非托管 C++ 类

c++ - boost.Python 如何公开 boost::shared_ptr 的 typedef?

c++ - 使用 Boost 序列化和反序列化 JSON