Skip to content.

Sections
Personal tools
You are here: Home » ダウンロード » ThreadJack用 » doc » TJEventSource

Document Actions

template <class EventType> class TJEventSource

イベントソース

継承:


Public メンバ

[more]typedef TJEventListener <EventType> ListenerType
リスナの型

Public メソッド

[more]virtual ~TJEventSource()
デストラクタ
[more]virtual void addEventListener(ListenerType* l)
イベントリスナを登録する
[more]virtual void removeEventListener(ListenerType* l)
イベントリスナを削除する
[more]virtual void removeEventListeners()
登録されているすべての Listener を削除する
[more]virtual bool hasEventListener(const ListenerType* l) const
Listner を持っているかどうかの検査
[more]virtual void destroyEventListeners() const
登録されている Listener を delete (デストラクタ呼び出し)する
[more]virtual unsigned countEventListeners() const
現在の Listener の数を返す

Protected メンバ

[more]vector <ListenerType*> listeners
リスナ列

Protected メソッド

[more]virtual void fireEvent(const EventType& ev)
イベントリスナにイベントを通知する.

文書

イベントソース.

各種イベントのソース(発生源)の実装を支援するためのテンプレートであり, イベントを型引数としている.EventListener と組で Java のイベントモデル java.util.EventObject / java.util.EventListener をサポートする.

C++ では多重継承を用いることができるため,イベントソース側 にも継承できるサポートクラスとしてこのクラスを用意した. (java.beans.PropertyChangesSupportを参照)

登録されたリスナへの通知の順序は規定されていない.

登録された Listener の delete(デストラクタ呼び出し) については, 基本的にはアプリケーションの責任とするが,明示的に destroyListeners を 呼ぶことで全 Listener に対して delete を呼び出すことができる.

Event, Listener, Source の使用例を示す.

 *
 *   // アプリケーション定義のイベント型
 *   class XxxEvent {
 *        TJEventSource<XxxEvent>* source;
 *        int value;
 *   public:
 *        XxxEvent(TJEventSource<XxxEvent>* s, int v):
 *            source(s), value(v) { }
 *        TJEventSource<XxxEvent>* getSource() const {
 *             return source;
 *        }
 *        int getValue() const { return value; }
 *   };
 *
 *   // アプリケーション定義のイベントリスナ
 *   #include "TJEventListener.h"
 *   class XxxListener : public TJEventListener<XxxEvent> {
 *       public:
 *           virtual void eventHappened(const XxxEvent& ev) {
 *             cout << "ev.value=" << ev.getValue() << endl;
 *           // マルチスレッド環境では this オブジェクトの操作は危険
 *           }
 *   };
 *
 *   // アプリケーション定義のイベントソース
 *   #include "TJEventSource.h"
 *   class XxxSource : public TJEventSource<XxxEvent> {
 *       public:
 *           void foo() {
 *                // ........
 *                // イベント発生
 *                XxxEvent ev(this, 2);
 *                fireEvent(ev);  // eventHappened を呼び出す
 *           }
 *   };
 *
 *   // ソースとリスナの連結
 *   XxxSource source;
 *   XxxListener listener;
 *   source.addListener(&listener);
 *
 * 

Listener, Source の呼び出し関係は以下のようになる.

 *
 *        XxxSource                        XxxListener
 *   method() |                                 |
 * ---------> |                                 |
 *            |--+                              |
 *            |  |fireEvent()                   |
 *            |<-+                              |
 *            |                                 |
 *            |          eventHappend()         |
 *            |-------------------------------->|
 *            |                                 |
 *
 * 

[ロック方針]

このクラスは,マルチスレッドに関するロックを全く意識しない. 必要であれば TJEventSource を見よ.

typedef TJEventListener <EventType> ListenerType
リスナの型

vector <ListenerType*> listeners
リスナ列

virtual ~TJEventSource()
デストラクタ. Listener のデストラクタは呼び出さないことに注意.

参照 :
destroyEventListeners()

virtual void addEventListener(ListenerType* l)
イベントリスナを登録する.

パラメータ:
l - 登録するリスナ.null なら無視

virtual void removeEventListener(ListenerType* l)
イベントリスナを削除する.

パラメータ:
l - 削除するリスナ.null なら無視

virtual void removeEventListeners()
登録されているすべての Listener を削除する. このメソッドが呼ばれた後,通知すべき Listener のリストは空になる. 各 Listener の delete (デストラクタ呼び出し)は行わない.

virtual bool hasEventListener(const ListenerType* l) const
Listner を持っているかどうかの検査.

パラメータ:
l - Listener オブジェクト

virtual void destroyEventListeners() const
登録されている Listener を delete (デストラクタ呼び出し)する.

基本的に Listener の delete はアプリケーションの責任とするが, アプリケーションが Listener 列の管理をしたくない場合,このメソッド が delete を支援する. Listener が自動変数の場合は,当然これを使用してはならない.

virtual unsigned countEventListeners() const
現在の Listener の数を返す.

返す値 :
現在の Listener の数

virtual void fireEvent(const EventType& ev)
イベントリスナにイベントを通知する.
パラメータ:
ev - リスナに通知するイベント


直接の子クラス:
TJSafeEventSource
作者 :
tokui, hiranabe @date 1998,7/31 @date 1999,4/1
参照 :
TJSafeEventSource
TJEventListener

索引(アルファベット順) HTMLクラス継承 または Java



This page was generated with the help of DOC++.