Boost C++ 库

... 全世界最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

execution_context - Boost C++ 函数库
PrevUpHomeNext

函数对象执行的上下文。

class execution_context :
  noncopyable
类型

名称

描述

allocator

allocator< void >

allocator_impl_base

id

用于唯一标识服务的类。

service

所有执行上下文服务的基类。

service_maker

所有执行上下文服务创建器的基类。

fork_event

与 fork 相关的事件通知。

成员函数

名称

描述

execution_context [构造函数]

构造函数。

notify_fork

通知 execution_context 与 fork 相关的事件。

~execution_context [析构函数]

析构函数。

受保护的成员函数

名称

描述

destroy

销毁 context 中的所有服务。

shutdown

关闭 context 中的所有服务。

友元

名称

描述

add_service

(已弃用:使用 make_service().) 将服务对象添加到 execution_context。

has_service

确定 execution_context 是否包含指定的服务类型。

make_service

创建服务对象并将其添加到 execution_context。

use_service

获取与给定类型对应的服务对象。

execution context 代表函数对象将被执行的位置。`io_context` 是 execution context 的一个示例。

execution_context 类和服

类 `execution_context` 实现了一组可扩展、类型安全、多态的服务,通过服务类型进行索引。

服务用于管理 execution context 中共享的资源。例如,定时器可以基于单个定时器队列实现,而该队列将存储在服务中。

通过三个函数模板 `use_service()`、`add_service()` 和 `has_service()` 来访问 `execution_context` 的服务。

在调用 `use_service<Service>()` 时,类型参数选择一个服务,使其所有成员可用。如果 `Service` 不存在于 `execution_context` 中,则会创建一个 `Service` 类型的对象并将其添加到 `execution_context` 中。C++ 程序可以使用函数模板 `has_service<Service>()` 检查 `execution_context` 是否实现了特定的服务。

服务对象可以使用函数模板 `add_service<Service>()` 显式添加到 `execution_context` 中。如果 `Service` 已存在,则会抛出 `service_already_exists` 异常。如果服务的拥有者不是 `execution_context` 参数相同的对象,则会抛出 `invalid_service_owner` 异常。

一旦通过调用 `use_service()` 从 `execution_context` 对象获取了服务引用,该引用在拥有该 `execution_context` 对象存在期间都可用。

所有服务实现都以 `execution_context::service` 作为公共基类。可以通过从该类派生来实现自定义服务,然后使用上述机制将其添加到 `execution_context` 中。

execution_context 作为基类

`execution_context` 类只能用作具体执行上下文类型的基类。`io_context` 就是这样一个派生类型的示例。

在销毁时,派生自 `execution_context` 的类必须执行 `execution_context::shutdown()`,然后是 `execution_context::destroy()`。

此销毁序列允许程序通过使用 `shared_ptr<>` 来简化其资源管理。其中对象的生命周期与连接(或其他异步操作序列)的生命周期相关联,指向该对象的 `shared_ptr` 将绑定到与其相关的所有异步操作的处理程序中。其工作原理如下:

  • 当单个连接结束时,所有相关的异步操作都会完成。相应的处理程序对象被销毁,并且指向这些对象的 `shared_ptr` 引用也被销毁。
  • 要关闭整个程序,需要调用 `io_context` 函数 `stop()` 以尽快终止所有 `run()` 调用。`io_context` 析构函数调用 `shutdown()` 和 `destroy()` 来销毁所有待处理的处理程序,从而导致所有连接对象的所有 `shared_ptr` 引用都被销毁。
要求

头文件: `boost/asio/execution_context.hpp`

便利头文件: `boost/asio/execution.hpp`


PrevUpHomeNext