System.SyncObjs.TConditionVariableCS.WaitFor
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); }
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
function | public | System.SyncObjs.pas System.SyncObjs.hpp |
System.SyncObjs | TConditionVariableCS |
Description
Définit l'état de veille sur la variable de condition, puis libère la section critique donnée.
Appelez WaitFor pour définir l'état de veille sur la variable de condition et libérer la section critique spécifiée par le paramètre CriticalSection.
Le paramètre TimeOut définit l'intervalle du délai d'attente. Quand cet intervalle est écoulé, la section critique est réacquise, même si la variable de condition n'a pas été réveillée par d'autres threads.
Le résultat renvoyé par la fonction WaitFor est de type TWaitResult et peut prendre une des valeurs suivantes :
Valeur |
Signification |
wrSignaled |
La variable de condition a été réveillée. |
wrTimeout |
L'intervalle du délai d'attente s'est écoulé sans que la variable de condition n'ait été réveillée. |
wrAbandoned |
La variable de condition a été détruite avant que l'intervalle du délai d'attente ne soit écoulé. |
wrError |
Une erreur a eu lieu pendant l'attente. Vérifiez la propriété LastError pour obtenir un code d'erreur donnant davantage d'informations. |
Les variables de condition peuvent subitement se réveiller, sans effectuer un appel explicite à la méthode Release ou ReleaseAll. En outre, d'autres threads peuvent s'exécuter avant que le thread qui est en veille sur la variable de condition ne soit réveillé. Par conséquent, effectuez l'appel à WaitFor à l'intérieur d'une boucle. Pour éviter les erreurs mentionnées ci-dessus, la boucle doit tester que la condition désirée devient true, même après le réveil de la variable de condition.