函数对象执行的上下文。
class execution_context : noncopyable
名称 |
描述 |
---|---|
用于唯一标识服务的类。 |
|
所有执行上下文服务的基类。 |
|
所有执行上下文服务创建者的基类。 |
|
与 fork 相关的事件通知。 |
名称 |
描述 |
---|---|
execution_context [构造函数] |
构造函数。 |
通知 execution_context 与 fork 相关的事件。 |
|
~execution_context [析构函数] |
析构函数。 |
名称 |
描述 |
---|---|
(已弃用:使用 make_service()。) 向 execution_context 添加服务对象。 |
|
确定 execution_context 是否包含指定的服务类型。 |
|
创建一个服务对象并将其添加到 execution_context。 |
|
获取与给定类型对应的服务对象。 |
execution context 表示函数对象将被执行的地方。 `io_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` 只能用作具体执行上下文类型的基类。 `io_context` 是这种派生类型的一个例子。
在销毁时,派生自 `execution_context` 的类必须执行 `execution_context::shutdown()`,然后执行 `execution_context::destroy()`。
这种销毁顺序允许程序通过使用 `shared_ptr<>` 来简化其资源管理。当对象的生命周期与连接(或其他异步操作序列)的生命周期相关联时,对象的 `shared_ptr` 将绑定到与之相关的所有异步操作的处理程序中。其工作原理如下:
头文件: `boost/asio/execution_context.hpp`
便利头文件: `boost/asio/execution.hpp`