System.SyncObjs.TConditionVariableMutex.WaitFor
Delphi
function WaitFor(AExternalMutex: TMutex; TimeOut: Cardinal = INFINITE): TWaitResult;
C++
HIDESBASE System::Types::TWaitResult __fastcall WaitFor(TMutex* AExternalMutex, unsigned TimeOut = (unsigned)(0xffffffff));
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | System.SyncObjs.pas System.SyncObjs.hpp |
System.SyncObjs | TConditionVariableMutex |
説明
条件変数を指定してスリープし、指定されたミューテックスを解放します。
WaitFor を呼び出すと、条件変数を指定してスリープし、AExternalMutex パラメータで指定されたミューテックスを解放することができます。
TimeOut パラメータではタイムアウトの時間を設定します。この時間が経過すると、条件変数が他のスレッドによって起こされなくても、ミューテックスが再取得されます。
WaitFor 関数が返す結果は、TWaitResult 型であり、以下のいずれかの値を取ることができます。
値 |
意味 |
wrSignaled |
条件変数が起こされました。 |
wrTimeout |
条件変数が起こされないまま、タイムアウト時間が経過しました。 |
wrAbandoned |
タイムアウト時間が経過する前に、条件変数が破棄されました。 |
wrError |
待機中にエラーが発生しました。詳細な情報については、LastError プロパティのエラー コードを確認してください。 |
Release メソッドや ReleaseAll メソッドを明示的に呼び出さないのに、条件変数が突然に起こされることがあります。また、条件変数を指定してスリープしているスレッドが起こされる前に、他のスレッドが動作することもあります。そのため、WaitFor の呼び出しはループ内で行ってください。上述のエラーが起きないようにするには、期待している条件が条件変数が起こされた後でも真になることを、ループでテストする必要があります。