次の方法で共有


target_block クラス

target_block クラスは、基本的なリンク管理機能と、ターゲットのみのブロックのエラー チェック機能を実現する抽象基底クラスです。

構文

template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;

パラメーター

_SourceLinkRegistry
ソース リンクを保持するために使用されるリンク レジストリ。

_MessageProcessorType
メッセージ処理用のプロセッサの種類。

メンバー

パブリックTypedefs

名前 説明
source_iterator この source_link_manager オブジェクトの target_block の反復子の型。

パブリック コンストラクター

名前 説明
target_block target_block オブジェクトを構築します。
~target_block デストラクター target_block オブジェクトを破棄します。

パブリック メソッド

名前 説明
伝播する ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。
send ソース ブロックからこのターゲット ブロックにメッセージを同期的に渡します。

保護メソッド

名前 説明
async_send 処理するメッセージを非同期的に送信します。
受信メッセージを拒否 ブロックに新しいメッセージを受け付けないように設定します。
バッチ処理を有効にする このブロックのバッチ処理を有効にします。
initialize_target 基本オブジェクトを初期化します。 具体的には、message_processor オブジェクトを初期化する必要があります。
link_source 指定されたソース ブロックをこの target_block オブジェクトにリンクします。
入力メッセージを処理する 入力として受信されたメッセージを処理します。
process_message 派生クラスでオーバーライドされると、この target_block オブジェクトによって受け入れられたメッセージを処理します。
propagate_message 派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの target_block オブジェクトにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。
register_filter 受信したすべてのメッセージに対して呼び出されるフィルター メソッドを登録します。
ソースを削除 未処理の非同期送信操作が完了するのを待機した後、すべてのソースのリンクを解除します。
send_message 派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの target_block オブジェクトにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。
sync_send 処理するメッセージを同期的に送信します。
ソース解除 この target_block オブジェクトから指定されたソース ブロックのリンクを解除します。
unlink_sources(ソースのリンク解除) この target_block オブジェクトからすべてのソース ブロックのリンクを解除します。 (ITarget::unlink_sources をオーバーライドします)。
wait_for_async_sends すべての非同期伝達が完了するまで待機します。

継承階層

ITarget

target_block

要件

ヘッダー: agents.h

名前空間: concurrency

async_send

処理するメッセージを非同期的に送信します。

void async_send(_Inout_opt_ message<_Source_type>* _PMessage);

パラメーター

_PMessage
送信されるメッセージへのポインター。

着信メッセージ拒否

ブロックに新しいメッセージを受け付けないように設定します。

void decline_incoming_messages();

解説

デストラクターはこのメソッドを呼び出して、破棄の実行中に新しいメッセージが拒否されるようにします。

バッチ処理を有効にする

このブロックのバッチ処理を有効にします。

void enable_batched_processing();

initialize_target

基本オブジェクトを初期化します。 具体的には、message_processor オブジェクトを初期化する必要があります。

void initialize_target(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

パラメーター

_PScheduler
タスクをスケジュールするために使用されるスケジューラ。

_PScheduleGroup
タスクをスケジュールするために使用されるスケジューラ グループ。

指定されたソース ブロックをこの target_block オブジェクトにリンクします。

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

パラメーター

_PSource
リンクされる ISource ブロックへのポインター。

解説

この関数は、target_block オブジェクトで直接呼び出すことはできません。 ブロックは、link_target ブロックで ISource メソッドを使用して一緒に接続する必要があります。これにより、対応するターゲットで link_source メソッドが呼び出されます。

入力メッセージを処理する

入力として受信されたメッセージを処理します。

virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);

パラメーター

_PMessage
処理するメッセージへのポインター。

メッセージ処理

派生クラスでオーバーライドされると、この target_block オブジェクトによって受け入れられたメッセージを処理します。

virtual void process_message(message<_Source_type> *);

伝播する

ソース ブロックからこのターゲット ブロックにメッセージを非同期的に渡します。

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

パラメーター

_PMessage
message オブジェクトを指すポインター。

_PSource
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

解説

または _PMessage のパラメーターが _PSource なら、invalid_argument 例外をメソッドはスローします。

プロパゲート_メッセージ

派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの target_block オブジェクトにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

パラメーター

_PMessage
message オブジェクトを指すポインター。

_PSource
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

register_filter

受信したすべてのメッセージに対して呼び出されるフィルター メソッドを登録します。

void register_filter(filter_method const& _Filter);

パラメーター

_Filter
フィルター メソッド。

ソースを削除

未処理の非同期送信操作が完了するのを待機した後、すべてのソースのリンクを解除します。

void remove_sources();

解説

すべてのターゲット ブロックは、デストラクター内のソースを削除するために、このルーチンを呼び出す必要があります。

送信

ソース ブロックからこのターゲット ブロックにメッセージを同期的に渡します。

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

パラメーター

_PMessage
message オブジェクトを指すポインター。

_PSource
メッセージを提供するソース ブロックへのポインター。

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

解説

または _PMessage のパラメーターが _PSource なら、invalid_argument 例外をメソッドはスローします。

メッセージの開始時以外に send メソッドを使用し、ネットワーク内でメッセージを伝達することは危険であり、デッドロックにつながる可能性があります。

send が返された場合、メッセージは既に受け取られていて、ターゲット ブロックに転送されているか、ターゲットによって拒否されています。

メッセージを送信

派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの target_block オブジェクトにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

戻り値

ターゲットがメッセージをどのように処理したのかを示す message_status

解説

既定では、派生クラスによってオーバーライドされない限り、このブロックは declined を返します。

同期送信

処理するメッセージを同期的に送信します。

void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);

パラメーター

_PMessage
送信されるメッセージへのポインター。

target_block

target_block オブジェクトを構築します。

target_block();

~target_block

target_block オブジェクトを破棄します。

virtual ~target_block();

この target_block オブジェクトから指定されたソース ブロックのリンクを解除します。

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

パラメーター

_PSource
リンクが解除される ISource ブロックへのポインター。

この target_block オブジェクトからすべてのソース ブロックのリンクを解除します。

virtual void unlink_sources();

wait_for_async_sends

すべての非同期伝達が完了するまで待機します。

void wait_for_async_sends();

解説

メッセージ ブロック デストラクターはこのメソッドを使用して、ブロックを破棄する前に、すべての非同期操作を完了する時間を確保します。

関連項目

コンカレンシー名前空間
ITarget クラス