Skip to content.

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

Document Actions

class TJSafeObservable: public TJObservable, public virtual TJSyncObject

スレッドセーフな Observable

継承:


Public メソッド

[more]TJSafeObservable()
コンストラクタ
[more]virtual void addObserver(TJObserver* o)
Observer を追加する
[more]virtual void removeObserver(TJObserver* o)
Observer を削除する
[more]virtual void removeObservers()
登録されているすべての Observer を削除する
[more]virtual void notifyObservers()
Observable の変化を Observer に通知する
[more]virtual void notifyObservers(void* arg)
Observable の変化を Observer に通知する
[more]virtual void notifyObserversRetainingLock()
Observable の変化を Observer に(ロック保持のまま)通知する
[more]virtual void notifyObserversRetainingLock(void* arg)
Observable の変化を Observer に(ロック保持のまま)通知する
[more]virtual bool hasChanged() const
変化したかどうかを検査する
[more]virtual unsigned countObservers() const
現在の Observer の数を返す
[more]virtual void destroyObservers() const
登録されている Observer を delete (デストラクタ呼び出し)する
[more]virtual bool isSafe() const
スレッドセーフなものかどうかの検査
[more]virtual bool hasObserver(const TJObserver* o) const
Observer を持っているかどうかの検査
[more]virtual ~TJSafeObservable()
デストラクタ

Protected メソッド

[more]virtual void setChanged()
変化したことをセットする
[more]virtual void clearChanged()
変化したことをクリアする

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

virtual void setChanged()
変化したことをセットする

virtual void clearChanged()
変化したことをクリアする


子クラスは存在しません
作者 :
hiranabe @date 1999,3/30
参照 :
TJSafeObserver
TJObservable
TJSafeEventSource

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



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