具有特定于实例的io_service,resolver等可以在每个函数中创建它们吗?

时间:2012-05-01 11:54:15

标签: c++ boost-asio

我正在尝试使用boost :: asio编写自己的异步网络客户端。我在可用示例中观察到的一件事是,是否要创建单个io_service,解析器和查询对象,或者为我正在创建的每个连接创建这些对象的新实例是不明确的。

我有一个客户端,它只会联系特定的服务器(唯一的ip和主机),但每天会做100次。

我打算拥有自己的网络类,在类本身中我有io_service,resolver,query和socket变量都是在构造对象时设置的。

myclient::myclient() : io_service_(), resolver_(io_service_),
  query_(tcp::v4(), host_, port_), socket_(io_service_) 
{
}

//...

resolver.async_resolve_();
io_service_.reset();
io_service_.run_one();

这看起来不错吗?

1 个答案:

答案 0 :(得分:1)

您应该尝试将自己限制为一个io_service用于上面描述的进程io_service类是线程安全的,因此许多线程可以同时使用它来分派工作。快速阅读io_service类文档,其中有一些使用示例。

另请查看chat client example并注意如何在main函数中创建io_service,然后通过引用传递给chat_client类。