System.SyncObjs.TConditionVariableCS.WaitFor

De RAD Studio API Documentation
Aller à : navigation, rechercher

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.

Voir aussi