class TJSafeObservable: public TJObservable, public virtual TJSyncObject
スレッドセーフな Observable
継承:
Public メソッド
-
TJSafeObservable()
- コンストラクタ
-
virtual void addObserver(TJObserver* o)
- Observer を追加する
-
virtual void removeObserver(TJObserver* o)
- Observer を削除する
-
virtual void removeObservers()
- 登録されているすべての Observer を削除する
-
virtual void notifyObservers()
- Observable の変化を Observer に通知する
-
virtual void notifyObservers(void* arg)
- Observable の変化を Observer に通知する
-
virtual void notifyObserversRetainingLock()
- Observable の変化を Observer に(ロック保持のまま)通知する
-
virtual void notifyObserversRetainingLock(void* arg)
- Observable の変化を Observer に(ロック保持のまま)通知する
-
virtual bool hasChanged() const
- 変化したかどうかを検査する
-
virtual unsigned countObservers() const
- 現在の Observer の数を返す
-
virtual void destroyObservers() const
- 登録されている Observer を delete (デストラクタ呼び出し)する
-
virtual bool isSafe() const
- スレッドセーフなものかどうかの検査
-
virtual bool hasObserver(const TJObserver* o) const
- Observer を持っているかどうかの検査
-
virtual ~TJSafeObservable()
- デストラクタ
クラス TJObservable:を継承している
クラス TJSyncObject:を継承している
Public メソッド
-
TJSyncObject& operator=(const TJSyncObject& obj)
void wait()
bool wait(long milliseconds)
void notify()
void notifyAll()
virtual bool invariant() const
Protected メソッド
-
void lock()
void unlock()
int unlockTemporarily()
void restoreLock(int lockcount)
文書
スレッドセーフな Observable.[ロック方針] 一般に,Observer を継承する ConcreteObserver と,Observable を継承する ConcreteObservable 間では,ConcreteObsever -> ConcreteObservable という 方向の呼び出しが自然に起こる.しかし,update() の呼び出しは, ConcreteObservable から ConcreteObserver へのコールバックとなる.
* * ConcreteObservable ConcreteObserver * | | * setState()| | * ---------> | | * |--+ | * | |setChanged() | * |<-+ | * notify | | * Observers()| | * ---------> | | * |★ここで一旦 | * |全ロック解放 | * | safeUpdate() | * |-------------------------------->|★ここでロックを * | |取得する. * | |--+ * | | | update() * | getState() |<-+ * |<--------------------------------| * *notifyObservers() では,update() の前に現在取得している一切の ロックを解放することにする.これによって,デッドロックの可能性 を回避する.アプリケーションは,ConcreteObserver -> ConcreteObservable の 呼び出しを正順として,ロックの取得もこの順序とすることが望まれる.
TJSafeObservable()
- コンストラクタ
virtual void addObserver(TJObserver* o)
- Observer を追加する.
- パラメータ:
- o - Observer オブジェクト.null なら無視.
virtual void removeObserver(TJObserver* o)
- Observer を削除する.
- パラメータ:
- o - Observer オブジェクト
virtual void removeObservers()
- 登録されているすべての Observer を削除する
virtual void notifyObservers()
- Observable の変化を Observer に通知する.
Observer の update 呼び出しの前に,ロックを解放 することに注意.
virtual void notifyObservers(void* arg)
- Observable の変化を Observer に通知する.
Observer の update 呼び出しの前に,ロックを解放 することに注意.
- パラメータ:
- arg - アプリケーションで使用する任意のデータ
virtual void notifyObserversRetainingLock()
- Observable の変化を Observer に(ロック保持のまま)通知する.
Observer の update 呼び出しの前に,ロックを解放を 行わないため,デッドロックの可能性を含むことに注意.
virtual void notifyObserversRetainingLock(void* arg)
- Observable の変化を Observer に(ロック保持のまま)通知する.
Observer の update 呼び出しの前に,ロックを解放を 行わないため,デッドロックの可能性を含むことに注意.
- パラメータ:
- arg - アプリケーションで使用する任意のデータ
virtual bool hasChanged() const
- 変化したかどうかを検査する.
- 返す値 :
- true setChanged が呼ばれまだ通知されていない状態
virtual unsigned countObservers() const
- 現在の Observer の数を返す.
- 返す値 :
- 現在の Observer の数
virtual void destroyObservers() const
- 登録されている Observer を delete (デストラクタ呼び出し)する
virtual bool isSafe() const
- スレッドセーフなものかどうかの検査.
このクラスでは,true となる.
- 返す値 :
- true スレッドセーフ
virtual bool hasObserver(const TJObserver* o) const
- Observer を持っているかどうかの検査.
- パラメータ:
- o - Oberver オブジェクト
virtual ~TJSafeObservable()
- デストラクタ.
Observer のデストラクタは呼び出さないことに注意.
- 参照 :
- destroyObservers()
- 子クラスは存在しません
- 作者 :
- hiranabe @date 1999,3/30
- 参照 :
- TJSafeObserver
TJObservable
TJSafeEventSource
索引(アルファベット順) HTMLクラス継承 または Java
This page was generated with the help of DOC++.