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
- void wait()
Protected メソッド
-
void lock()
- void unlock()
- int unlockTemporarily()
- void restoreLock(int lockcount)
- void unlock()
文書
スレッドセーフな 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++.