Visit Mozilla.org

nsIThreadObserver

出典: MDC

この記事は Firefox 3 の新機能について述べています

nsIThreadObserver インタフェースを実装すると、オブザーバが階層化されたイベントキューを実装できます。

例えば、以下のようにして、GUI ツールキットのために処理中のイベントを、あるスレッドのイベントの上に重ね合わせることができます。

var NativeQueue;
Observer = {
  onDispatchedEvent(thread) {
    NativeQueue.signal();
  }
  onProcessNextEvent(thread, mayWait, recursionDepth) {
    if (NativeQueue.hasNextEvent()) {
      NativeQueue.processNextEvent();
    }
    while (mayWait && !thread.hasPendingEvent()) {
      NativeQueue.wait();
      NativeQueue.processNextEvent();
    }
  }
};
警告: このインタフェースの実装はスレッドセーフでなければなりません。

継承元: nsISupports

目次

nsIThreadObserverxpcom/threads/nsIThreadInternal.idl で定義されています。これは scriptable非凍結です。 (Mozilla 1.9から更新されていません)

[編集] メソッドの概要

void onDispatchedEvent(in nsIThreadInternal thread);
void onProcessNextEvent(in nsIThreadInternal thread, in boolean mayWait, in unsigned long recursionDepth);
void afterProcessNextEvent(in nsIThreadInternal thread, in unsigned long recursionDepth);

[編集] メソッド

[編集] onDispatchedEvent()

イベントがスレッドに割り当てられた後に呼び出されます。このメソッドはどのスレッドからも呼び出すことができます。

註: このメソッドの呼び出し中にスレッドのオブザーバを変更することは有効です。
void onDispatchedEvent(
  in nsIThreadInternal thread
)
[編集] 引数
thread
イベントが割り当てられた nsIThread

[編集] onProcessNextEvent()

イベントが処理される前に、nsIThreadprocessNextEvent() メソッドによって呼び出されます。このメソッドはターゲットのスレッド上でのみ呼び出すことができます。

註: このメソッドの呼び出し中にスレッドのオブザーバを変更することは有効です。
void onProcessNextEvent(
  in nsIThreadInternal thread,
  in boolean mayWait,
  in unsigned long recursionDepth

);

[編集] 引数
thread
イベントの処理が行われている nsIThread
mayWait
スレッドの呼び出しをブロックすることをメソッドに許可する場合は true。この引数は、例えばスレッド停止中などは false になります。
recursionDepth
現在の呼び出しに加えて、呼び出しスタック上での ProcessNextEvent() の呼び出し回数。

[編集] afterProcessNextEvent()

イベントが処理された後に、nsIThreadprocessNextEvent() メソッドによって呼び出されます。このメソッドはターゲットのスレッド上でのみ呼び出すことができます。

註: このメソッドの呼び出し中にスレッドのオブザーバを変更することは有効です。
void afterProcessNextEvent(
  in nsIThreadInternal thread,
  in unsigned long recursionDepth
)
[編集] 引数
thread
イベントの処理が行われた nsIThread
recursionDepth
現在の呼び出しに加えて、呼び出しスタック上での ProcessNextEvent() の呼び出し回数。

[編集] 関連記事