System.SyncObjs.TConditionVariableCS.WaitFor

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

function WaitFor(CriticalSection: TCriticalSection; TimeOut: Cardinal = INFINITE): TWaitResult; overload;
function WaitFor(var CriticalSection: TRTLCriticalSection; TimeOut: Cardinal = INFINITE): TWaitResult; overload;

C++

HIDESBASE System::Types::TWaitResult __fastcall WaitFor(TCriticalSection* CriticalSection, unsigned TimeOut = (unsigned)(0xffffffff))/* overload */;
HIDESBASE System::Types::TWaitResult __fastcall WaitFor(_RTL_CRITICAL_SECTION &CriticalSection, unsigned TimeOut = (unsigned)(0xffffffff))/* overload */;
inline System::Types::TWaitResult __fastcall  WaitFor(unsigned Timeout = (unsigned)(0xffffffff)){ return TSynchroObject::WaitFor(Timeout); }
inline System::Types::TWaitResult __fastcall  WaitFor(const System::Timespan::TTimeSpan &Timeout){ return TSynchroObject::WaitFor(Timeout); }

プロパティ

種類 可視性 ソース ユニット
function public
System.SyncObjs.pas
System.SyncObjs.hpp
System.SyncObjs TConditionVariableCS

説明

条件変数を指定してスリープし、指定されたクリティカル セクションを解放します。

WaitFor を呼び出すと、条件変数を指定してスリープし、CriticalSection パラメータで指定されたクリティカル セクションを解放することができます。

TimeOut パラメータではタイムアウトの時間を設定します。この時間が経過すると、条件変数が他のスレッドによって起こされなくても、クリティカル セクションが再取得されます。

WaitFor 関数が返す結果は、TWaitResult 型であり、以下のいずれかの値を取ることができます。



意味

wrSignaled

条件変数が起こされました。

wrTimeout

条件変数が起こされないまま、タイムアウト時間が経過しました。

wrAbandoned

タイムアウト時間が経過する前に、条件変数が破棄されました。

wrError

待機中にエラーが発生しました。詳細な情報については、LastError プロパティのエラー コードを確認してください。



Release メソッドや ReleaseAll メソッドを明示的に呼び出さないのに、条件変数が突然に起こされることがあります。また、条件変数を指定してスリープしているスレッドが起こされる前に、他のスレッドが動作してしまうこともあります。そのため、WaitFor の呼び出しはループ内で行ってください。上述のエラーが起きないようにするには、期待している条件が条件変数が起こされた後でも真になることを、ループでテストする必要があります。

関連項目