次の方法で共有


Monitor.Wait メソッド (Object, TimeSpan)

オブジェクトのロックを解放し、現在のスレッドがロックを再取得するまで、または指定した時間が経過するまでそのスレッドをブロックします。

Overloads Public Shared Function Wait( _
   ByVal obj As Object, _   ByVal timeout As TimeSpan _) As Boolean
[C#]
public static bool Wait(objectobj,TimeSpantimeout);
[C++]
public: static bool Wait(Object* obj,TimeSpantimeout);
[JScript]
public static function Wait(
   obj : Object,timeout : TimeSpan) : Boolean;

パラメータ

  • obj
    待機を行うオブジェクト。
  • timeout
    このメソッドから制御が戻るまでの待機時間を表す TimeSpan

戻り値

指定した時間が経過する前にロックが再取得された場合は true 。それ以外の場合は false

例外

例外の種類 条件
ArgumentNullException obj パラメータが null 参照 (Visual Basic では Nothing) です。
SynchronizationLockException 呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。
ThreadInterruptedException Wait を呼び出したスレッドは、後で待機中の状態を中断されます。これは、別のスレッドがこのスレッドの Interrupt メソッドを呼び出すと発生します。
ArgumentOutOfRangeException timeout パラメータのミリ秒単位の値が負で、 Infinite と等価でありません。または MaxValue より大きい値です。

解説

成功すると、このメソッドは obj パラメータの排他ロックを再取得します。

このメソッドは Wait(Object) と同じように動作します。ただし、 timeout パラメータに Infinite のミリ秒を指定しない場合は、無制限にブロックしません。指定した時間が経過すると、このメソッドは、呼び出し元がロックを再取得したかどうかを示す値を返します。 timeout が 0 の場合は、 Wait を呼び出すスレッドはロックを解放し、すぐに実行待ちキューに入ってロックを再取得します。

指定したオブジェクト上のロックを現在所有しているスレッドは、他のスレッドがそのオブジェクトにアクセスできるように、そのオブジェクトを解放するために、このメソッドを呼び出します。呼び出し元は、ロックを再取得するために待機している間は、ブロックされます。呼び出し元が、オブジェクト上の別のスレッドの操作の結果として発生する、オブジェクトの状態の変更を待機しているときに、このメソッドが呼び出されます。

スレッドが Wait を呼び出すと、オブジェクトのロックが解除され、オブジェクトの待機中のキューが入力されます。オブジェクトの実行待ちキューがある場合、そのキュー内の次のスレッドがロックを取得し、オブジェクトを排他で使用します。 Wait を呼び出したスレッドは、ロックを保持しているスレッドが PulseAll を呼び出すまで、または Wait を呼び出したスレッドがキュー内の次のスレッドの場合は、ロックを保持しているスレッドが Pulse を呼び出すまで、待機中のキュー内に残ります。ただし、他のスレッドがこのオブジェクトの Pulse メソッドまたは PulseAll メソッドを呼び出す前に timeout が経過すると、元のスレッドはロックを再取得するために実行待ちキューに移動します。オブジェクトの状態の条件が適合しなかった場合、スレッドは再び Wait を呼び出して、条件が合うまで待機中のキューを再入力します。

timeout パラメータに Infinite を指定すると、ロックの所有者が Pulse または PulseAll を呼び出すまで、このメソッドは無制限にブロックします。

呼び出し元は、指定されたオブジェクトに対して Enter が呼び出された回数に関係なく、 Wait を 1 回実行します。概念上は、 Wait メソッドは、オブジェクト上で呼び出し元が Enter を呼び出した回数を格納し、ロックされたオブジェクトを完全に解放するために必要な回数だけ Exit を呼び出します。その後、呼び出し元は、オブジェクトを再取得するために待機している間はブロックします。呼び出し元がロックを再取得すると、呼び出し元が行って保存された Enter の回数を復元するために必要な回数だけ Enter が呼び出されます。 Wait を呼び出すと、指定したオブジェクトのロックだけが解放されます。呼び出し元が他のオブジェクトのロックの所有者である場合、これらのロックは解放されません。

同期されたオブジェクトは、現在ロックを保持しているスレッドへの参照、ロックを取得する準備ができているスレッドを格納している実行待ちキューへの参照、オブジェクトの状態の変更通知を待機しているスレッドを格納している待機キューへの参照など、複数の参照を保持しています。 PulsePulseAllWait の各メソッドは、同期されたコードのブロック内から呼び出される必要があります。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

参照

Monitor クラス | Monitor メンバ | System.Threading 名前空間 | Monitor.Wait オーバーロードの一覧 | Thread | スレッド処理 | Monitor