timer 类

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。)

备注

有关详细信息,请参阅异步消息块

继承层次结构

ISource

source_block

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 的调用之前。

通知新目标已链接到 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,则必须调用 consumerelease 来获取或释放消息的所有权。

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();

另请参阅

并发命名空间