transformer 類別

transformer 傳訊區塊是多來源的單一目標排序 propagator_block,可以存放無限個不同類型訊息。

語法

template<class _Input, class _Output>
class transformer : public propagator_block<single_link_registry<ITarget<_Output>>,
    multi_link_registry<ISource<_Input>>>;

參數

_輸入
緩衝區所接受之訊息的承載類型。

_輸出
緩衝區所儲存和傳播之訊息的承載類型。

成員

公用建構函式

名稱 描述
變壓器 已多載。 建構 transformer 傳訊區塊。
~transformer 解構函式 transformer終結傳訊區塊。

受保護的方法

名稱 描述
accept_message 接受此 transformer 傳訊區塊所提供的訊息,並將擁有權轉移給呼叫端。
consume_message 取用先前由 transformer 目標提供的 訊息,並將擁有權轉移給呼叫端。
link_target_notification 回呼,通知新目標已連結至此 transformer 傳訊區塊。
propagate_message 以非同步方式將訊息從 ISource 區塊傳遞至這個 transformer 傳訊區塊。 propagate當來源區塊呼叫時,方法會叫用它。
propagate_to_any_targets 在輸入訊息上執行轉換器函式。
release_message 釋放先前的訊息保留。 (覆寫 source_block::release_message .
reserve_message 保留此 transformer 傳訊區塊先前提供的訊息。 (覆寫 source_block::reserve_message .
resume_propagation 在發行保留之後繼續傳播。 (覆寫 source_block::resume_propagation .
send_message 以同步方式將訊息從 ISource 區塊傳遞至此 transformer 傳訊區塊。 send當來源區塊呼叫時,方法會叫用它。
supports_anonymous_source 覆寫 supports_anonymous_source 方法,指出這個區塊可以接受未連結的來源提供給它的訊息。 (覆寫 ITarget::supports_anonymous_source .)

備註

如需詳細資訊,請參閱 非同步消息塊

繼承階層架構

ISource

ITarget

source_block

propagator_block

transformer

需求

標頭: agents.h

命名空間: concurrency

accept_message

接受此 transformer 傳訊區塊所提供的訊息,並將擁有權轉移給呼叫端。

virtual message<_Output>* accept_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identity所提供 message 物件的 。

傳回值

呼叫端現在擁有其擁有權的物件指標 message

consume_message

取用先前由 transformer 目標提供的 訊息,並將擁有權轉移給呼叫端。

virtual message<_Output>* consume_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identitymessage 所取用物件的 。

傳回值

呼叫端現在擁有其擁有權的物件指標 message

備註

類似于 accept ,但前面一律會呼叫 reserve

回呼,通知新目標已連結至此 transformer 傳訊區塊。

virtual void link_target_notification(_Inout_ ITarget<_Output> *);

propagate_message

以非同步方式將訊息從 ISource 區塊傳遞至這個 transformer 傳訊區塊。 propagate當來源區塊呼叫時,方法會叫用它。

virtual message_status propagate_message(
    _Inout_ message<_Input>* _PMessage,
    _Inout_ ISource<_Input>* _PSource);

參數

_PMessage
message 物件的指標。

_PSource
提供訊息的來源區塊指標。

傳回值

message_status 指出目標決定對訊息執行的動作。

propagate_to_any_targets

在輸入訊息上執行轉換器函式。

virtual void propagate_to_any_targets(_Inout_opt_ message<_Output> *);

release_message

釋放先前的訊息保留。

virtual void release_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identity要釋放之 message 物件的 。

reserve_message

保留此 transformer 傳訊區塊先前提供的訊息。

virtual bool reserve_message(runtime_object_identity _MsgId);

參數

_MsgId
runtime_object_identity要保留之 message 物件的 。

傳回值

true 如果已成功保留訊息,則為 , false 否則為 。

備註

呼叫 之後 reserve ,如果傳回 trueconsume 則必須呼叫 或 release 以取得或釋放訊息的擁有權。

resume_propagation

在發行保留之後繼續傳播。

virtual void resume_propagation();

send_message

以同步方式將訊息從 ISource 區塊傳遞至此 transformer 傳訊區塊。 send當來源區塊呼叫時,方法會叫用它。

virtual message_status send_message(
    _Inout_ message<_Input>* _PMessage,
    _Inout_ ISource<_Input>* _PSource);

參數

_PMessage
message 物件的指標。

_PSource
提供訊息的來源區塊指標。

傳回值

message_status 指出目標決定對訊息執行的動作。

supports_anonymous_source

覆寫 supports_anonymous_source 方法,指出這個區塊可以接受未連結的來源提供給它的訊息。

virtual bool supports_anonymous_source();

傳回值

true 因為 區塊不會延後提供的訊息。

變壓器

建構 transformer 傳訊區塊。

transformer(
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

transformer(
    Scheduler& _PScheduler,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    Scheduler& _PScheduler,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

transformer(
    ScheduleGroup& _PScheduleGroup,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget = NULL);

transformer(
    ScheduleGroup& _PScheduleGroup,
    _Transform_method const& _Func,
    _Inout_opt_ ITarget<_Output>* _PTarget,
    filter_method const& _Filter);

參數

_Func
將針對每個已接受訊息叫用的函式。

_PTarget
要與轉換器連結的目標區塊指標。

_濾波器
篩選函式,決定是否應接受提供的訊息。

_PScheduler
Scheduler 物件,在其內會排定 transformer 傳訊區塊的傳播工作。

_PScheduleGroup
ScheduleGroup 物件,在其內會排定 transformer 傳訊區塊的傳播工作。 所使用的 Scheduler 物件由排程群組所隱含。

備註

如果您未指定 _PScheduler_PScheduleGroup 參數,執行階段會使用預設排程器。

此類型 _Transform_method 是具有簽章 _Output (_Input const &) 的函式,此訊息區塊會叫用此 transformer 訊息區塊來處理訊息。

此類型 filter_method 是具有簽章 bool (_Input const &) 的函式,由此 transformer 傳訊區塊叫用,以判斷它是否應該接受提供的訊息。

~變壓器

transformer終結傳訊區塊。

~transformer();

另請參閱

concurrency 命名空間
call 類別