函数对象执行的上下文。
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`