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
メッセージ処理用のプロセッサの種類。

メンバー

パブリック typedef

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

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

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

パブリック メソッド

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

保護メソッド

名前 説明
async_send 処理するメッセージを非同期的に送信します。
decline_incoming_messages 新しいメッセージを拒否する用にブロックに指示します。
enable_batched_processing このブロックのバッチ処理を有効にします。
initialize_target 基本オブジェクトを初期化します。 具体的には、message_processor オブジェクトを初期化する必要があります。
link_source 指定されたソース ブロックをこの target_block オブジェクトにリンクします。
process_input_messages 入力として受信されたメッセージを処理します。
process_message 派生クラスでオーバーライドされると、この target_block オブジェクトによって受け入れられたメッセージを処理します。
propagate_message 派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの target_block オブジェクトにメッセージを非同期的に渡します。 ソース ブロックによって呼び出されると、propagate メソッドによって呼び出されます。
register_filter 受信したすべてのメッセージに対して呼び出されるフィルター メソッドを登録します。
remove_sources 未処理の非同期送信操作が完了するのを待機した後、すべてのソースのリンクを解除します。
send_message 派生クラスでオーバーライドされた場合、このメソッドは、ISource ブロックからこの target_block オブジェクトにメッセージを同期的に渡します。 ソース ブロックによって呼び出されると、send メソッドによって呼び出されます。
sync_send 処理するメッセージを同期的に送信します。
unlink_source この 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
送信されるメッセージへのポインター。

decline_incoming_messages

新しいメッセージを拒否する用にブロックに指示します。

void decline_incoming_messages();

解説

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

enable_batched_processing

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

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

process_input_messages

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

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

パラメーター

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

process_message

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

virtual void process_message(message<_Source_type> *);

propagate

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

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

パラメーター

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

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

戻り値

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

解説

_PMessage パラメーターまたは _PSource パラメーターのいずれかが NULL の場合、メソッドは invalid_argument 例外をスローします。

propagate_message

派生クラスでオーバーライドされた場合、このメソッドは、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
フィルター メソッド。

remove_sources

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

void remove_sources();

解説

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

[Send]

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

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

パラメーター

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

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

戻り値

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

解説

_PMessage パラメーターまたは _PSource パラメーターのいずれかが NULL の場合、メソッドは invalid_argument 例外をスローします。

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

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

send_message

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

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

戻り値

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

解説

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

sync_send

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

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 クラス