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