continue_msg オブジェクトのレシーバーとして動作するノードの抽象的な基本クラス。これらのノードは、try_put 呼び出しの数が既知のプレデセッサー数を表すしきい値に達すると execute メソッドを呼び出します。
class continue_receiver;
#include "tbb/flow_graph.h"
このノードは、try_put メソッドが呼び出された回数が既知のプレデセッサー数と等しくなるとトリガーされます。トリガーされると、ノードは execute メソッドを呼び出してリセットします。try_put 呼び出しの正しい数を受け取ると再び処理を行います。このノードは、各ノードを実行する前にプレデセッサーの完了を待つ必要があるがエッジ間で明示的なデータが渡されない、依存関係グラフに適しています。
namespace tbb { namespace flow { class continue_receiver : public receiver< continue_msg > { public: typedef continue_msg input_type; typedef sender< input_type > predecessor_type; continue_receiver( int num_predecessors = 0 ); continue_receiver( const continue_receiver &src ); virtual ~continue_receiver(); virtual bool try_put( const input_type &v ); virtual bool register_predecessor( predecessor_type &p ); virtual bool remove_predecessor( predecessor_type &p ); protected: virtual void execute() = 0; }; } }
メンバー | 説明 |
---|---|
continue_receiver( int num_predecessors = 0 ) |
try_put 呼び出しを num_predecessors 回受け取った後でトリガーするために初期化される continue_receiver を構築します。 |
continue_receiver( const continue_receiver &src ) |
src の構築後の状態と同じ初期状態で continue_receiver を構築します。現在の try_puts 呼び出しを受け取った回数、または現在の既知のプレデセッサー数はコピーしません。src がゼロ以外のしきい値で構築されている場合、continue_receiver もゼロ以外のしきい値で構築されます。 |
~continue_receiver( ) |
デストラクター。 |
bool try_put( const input_type &v ) |
try_put 呼び出しを受け取った回数をインクリメントします。インクリメント後の回数が既知のプレデセッサー数と等しい場合、execute が呼び出され、try_put 呼び出しの内部カウントはゼロにリセットされます。このメソッドは、execute の呼び出しと内部カウントの更新があたかもアトミックに行われたように実行されます。 戻り値: true。 |
bool register_predecessor( predecessor_type &p ) |
既知のプレデセッサー数をインクリメントします。 戻り値: true。 |
bool remove_predecessor( predecessor_type &p ) |
既知のプレデセッサー数をデクリメントします。 注意この呼び出しにより受け取った try_put 呼び出しの回数が既知のプレデセッサー数と等しくなる場合、execute メソッドは呼び出されません。つまり、remove_predecessor の呼び出しは execute を呼び出しません。 |
void execute() = 0 |
try_put 呼び出しの数が既知のプレデセッサー数と等しくなると呼び出される純粋な仮想メソッド。子クラスでオーバーライドする必要があります。 注意センダーが try_put でブロックされているときに呼び出されるため、このメソッドは非常に高速になります。あるいは、ワークをオフロードするためタスクをスポーンします。 |