timer 消息块是单目标的 source_block,能够在经过指定的时间段后或在特定时间间隔向其目标发送消息。
语法
template<class T>
class timer : public Concurrency::details::_Timer, public source_block<single_link_registry<ITarget<T>>>;
参数
T
此块的输出消息的有效负载类型。
成员
公共构造函数
| 名称 | 描述 |
|---|---|
| timer | 已重载。 构造 timer 消息块,用于在指定间隔后触发给定的消息。 |
| ~timer 析构函数 | 销毁 timer 消息块。 |
公共方法
| 名称 | 描述 |
|---|---|
| pause | 停止 timer 消息块。 如果它是重复的 timer 消息块,则可以使用后续 start() 调用重新启动它。 对于非重复计时器,这与 stop 调用的效果相同。 |
| start | 启动 timer 消息块。 调用后的指定毫秒数,指定的值将作为 message 传播到下游。 |
| stop | 停止 timer 消息块。 |
受保护方法
| 名称 | 描述 |
|---|---|
| accept_message | 接受此 timer 消息块提供的消息,将所有权转让给调用方。 |
| consume_message | 使用 timer 先前提供且由目标保留的消息,将所有权转移给调用方。 |
| link_target_notification | 通知新目标已链接到 timer 消息块的回调。 |
| propagate_to_any_targets | 尝试向所有链接目标提供 timer 块生成的消息。 |
| release_message | 释放先前的消息预留。 (替代 source_block::release_message。) |
| reserve_message | 保留此 timer 消息块之前提供的消息。 (替代 source_block::reserve_message。) |
| resume_propagation | 在释放预留后恢复传播。 (重写 source_block::resume_propagation。) |
备注
有关详细信息,请参阅异步消息块。
继承层次结构
timer
要求
标头: agents.h
命名空间: 并发
accept_message
接受此 timer 消息块提供的消息,将所有权转让给调用方。
virtual message<T>* accept_message(runtime_object_identity _MsgId);
参数
_MsgId
提供的 message 对象的 runtime_object_identity。
返回值
指向调用方现在对其拥有所有权的 message 对象的指针。
consume_message
使用 timer 先前提供且由目标保留的消息,将所有权转移给调用方。
virtual message<T>* consume_message(runtime_object_identity _MsgId);
参数
_MsgId
正在使用的 message 对象的 runtime_object_identity。
返回值
指向调用方现在对其拥有所有权的 message 对象的指针。
注解
类似于 accept,但始终在对 reserve 的调用之前。
link_target_notification
通知新目标已链接到 timer 消息块的回调。
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
参数
_PTarget
指向新链接的目标的指针。
pause
停止 timer 消息块。 如果它是重复的 timer 消息块,则可以使用后续 start() 调用重新启动它。 对于非重复计时器,这与 stop 调用的效果相同。
void pause();
propagate_to_any_targets
尝试向所有链接目标提供 timer 块生成的消息。
virtual void propagate_to_any_targets(_Inout_opt_ message<T> *);
release_message
释放先前的消息预留。
virtual void release_message(runtime_object_identity _MsgId);
参数
_MsgId
正在释放的 message 对象的 runtime_object_identity。
reserve_message
保留此 timer 消息块之前提供的消息。
virtual bool reserve_message(runtime_object_identity _MsgId);
参数
_MsgId
正在保留的 message 对象的 runtime_object_identity。
返回值
如果已成功保留该消息,则为 true;否则,为 false。
备注
调用 reserve 后,如果返回 true,则必须调用 consume 或 release 来获取或释放消息的所有权。
resume_propagation
在释放预留后恢复传播。
virtual void resume_propagation();
start
启动 timer 消息块。 调用后的指定毫秒数,指定的值将作为 message 传播到下游。
void start();
stop
停止 timer 消息块。
void stop();
计时器
构造 timer 消息块,用于在指定间隔后触发给定的消息。
timer(
unsigned int _Ms,
T const& value,
ITarget<T>* _PTarget = NULL,
bool _Repeating = false);
timer(
Scheduler& _Scheduler,
unsigned int _Ms,
T const& value,
_Inout_opt_ ITarget<T>* _PTarget = NULL,
bool _Repeating = false);
timer(
ScheduleGroup& _ScheduleGroup,
unsigned int _Ms,
T const& value,
_Inout_opt_ ITarget<T>* _PTarget = NULL,
bool _Repeating = false);
参数
_Ms
调用开始后必须经过多少毫秒才能将指定的消息传播到下游。
value
在计时器过期时将传播到下游的值。
_PTarget
计时器将向其传播消息的目标。
_Repeating
如果为 true,则表示计时器将每隔 _Ms 毫秒定期触发一次。
_Scheduler
在其中计划了 timer 消息块的传播任务的 Scheduler 对象。
_ScheduleGroup
在其中计划了 ScheduleGroup 消息块的传播任务的 timer 对象。 所用 Scheduler 对象由该计划组提示。
备注
如果未指定 _Scheduler 或 _ScheduleGroup 函数,运行时将使用默认的计划程序。
~timer
销毁 timer 消息块。
~timer();