multitype_join 類別
multitype_join
傳訊區塊是多來源的單一目標傳訊區塊,會與來自其來源的不同類型訊息合併,並且為其目標提供 Tuple 合併的訊息。
語法
template<
typename T,
join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;
參數
T
區塊 tuple
所聯結和傳播之訊息的承載類型。
_Jtype
這是 greedy
或 的區塊類型 join
non_greedy
成員
公用 Typedefs
名稱 | 描述 |
---|---|
type |
的類型 T 別名。 |
公用建構函式
名稱 | 描述 |
---|---|
multitype_join | 已多載。 建構 multitype_join 傳訊區塊。 |
~multitype_join解構函式 | multitype_join 終結傳訊區塊。 |
公用方法
名稱 | 描述 |
---|---|
接受 | 接受此 multitype_join 區塊所提供的訊息,並將擁有權轉移給呼叫端。 |
acquire_ref | 取得此 multitype_join 傳訊區塊的參考計數,以防止刪除。 |
消費 | 取用訊息區塊先前提供的 multitype_join 訊息,並成功由目標保留,並將擁有權轉移給呼叫端。 |
link_target | 將目標區塊連結至此 multitype_join 傳訊區塊。 |
release | 釋放先前成功的訊息保留。 |
release_ref | 釋放此 multiple_join 傳訊區塊的參考計數。 |
reserve | 保留此 multitype_join 傳訊區塊先前提供的訊息。 |
unlink_target | 從這個 multitype_join 傳訊區塊取消連結目標區塊。 |
unlink_targets | 從這個 multitype_join 傳訊區塊取消連結所有目標。 (覆寫 ISource::unlink_targets . |
備註
如需詳細資訊,請參閱 非同步消息塊 。
繼承階層架構
multitype_join
需求
標頭: agents.h
命名空間: concurrency
accept
接受此 multitype_join
區塊所提供的訊息,並將擁有權轉移給呼叫端。
virtual message<_Destination_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_MsgId
runtime_object_identity
所提供 message
物件的 。
_PTarget
呼叫 方法之目標區塊的 accept
指標。
傳回值
呼叫端現在擁有其擁有權之訊息的指標。
acquire_ref
取得此 multitype_join
傳訊區塊的參考計數,以防止刪除。
virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_PTarget
呼叫這個方法之目標區塊的指標。
備註
這個方法是由 ITarget
在 方法期間 link_target
連結至這個來源的物件所呼叫。
消耗
取用訊息區塊先前提供的 multitype_join
訊息,並成功由目標保留,並將擁有權轉移給呼叫端。
virtual message<_Destination_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_MsgId
runtime_object_identity
保留 message
物件的 。
_PTarget
呼叫 方法之目標區塊的 consume
指標。
傳回值
呼叫端現在擁有其擁有權的物件指標 message
。
備註
方法 consume
類似于 accept
,但之前一律必須有傳回 true
的 reserve
呼叫。
link_target
將目標區塊連結至此 multitype_join
傳訊區塊。
virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_PTarget
要連結至此 multitype_join
傳訊區塊之區塊的指標 ITarget
。
multitype_join
建構 multitype_join
傳訊區塊。
explicit multitype_join(
T _Tuple);
multitype_join(
Scheduler& _PScheduler,
T _Tuple);
multitype_join(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
multitype_join(
multitype_join&& _Join);
參數
_元
此 tuple
傳訊區塊的 multitype_join
來源。
_PScheduler
Scheduler
物件,在其內會排定 multitype_join
傳訊區塊的傳播工作。
_PScheduleGroup
ScheduleGroup
物件,在其內會排定 multitype_join
傳訊區塊的傳播工作。 所使用的 Scheduler
物件由排程群組所隱含。
_加入
作為複製來源處的 multitype_join
傳訊區塊。 請注意,原始物件會被遺棄,使其成為移動建構函式。
備註
如果您未指定 _PScheduler
或 _PScheduleGroup
參數,執行階段會使用預設排程器。
移動建構函式不會在鎖定下執行,這表示使用者必須確認在移動時沒有任何輕量工作在執行中。 否則,可能發生許多競爭情況,導致例外狀況或不一致的狀態。
~multitype_join
multitype_join
終結傳訊區塊。
~multitype_join();
版本
釋放先前成功的訊息保留。
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_MsgId
runtime_object_identity
要釋放之 message
物件的 。
_PTarget
呼叫 方法之目標區塊的 release
指標。
release_ref
釋放此 multiple_join
傳訊區塊的參考計數。
virtual void release_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_PTarget
呼叫這個方法之目標區塊的指標。
備註
這個方法是由 ITarget
從這個來源取消連結的物件所呼叫。 允許來源區塊釋放保留給目標區塊的任何資源。
reserve
保留此 multitype_join
傳訊區塊先前提供的訊息。
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_MsgId
runtime_object_identity
要保留之 message
物件的 。
_PTarget
呼叫 方法之目標區塊的 reserve
指標。
傳回值
true
如果已成功保留訊息,則為 , false
否則為 。 保留失敗可能有許多原因,包括:訊息已經保留或已由另一個目標接受、來源拒絕保留等等。
備註
呼叫 reserve
之後,如果成功,您必須呼叫 consume
或 release
,才能分別取得或放棄訊息的擁有權。
unlink_target
從這個 multitype_join
傳訊區塊取消連結目標區塊。
virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);
參數
_PTarget
要從這個 multitype_join
傳訊區塊取消連結之區塊的指標 ITarget
。
unlink_targets
從這個 multitype_join
傳訊區塊取消連結所有目標。
virtual void unlink_targets();
另請參閱
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: