System.SyncObjs.TConditionVariableMutex.WaitFor
Delphi
function WaitFor(AExternalMutex: TMutex; TimeOut: LongWord = INFINITE): TWaitResult;
C++
HIDESBASE System::Types::TWaitResult __fastcall WaitFor(TMutex* AExternalMutex, unsigned TimeOut = (unsigned)(0xffffffff));
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
function | public | System.SyncObjs.pas System.SyncObjs.hpp |
System.SyncObjs | TConditionVariableMutex |
Description
Définit l'état de veille sur la variable de condition, puis libère le mutex spécifié.
Appelez WaitFor pour définir l'état de veille sur la variable de condition et libérer le mutex spécifié par le paramètre AExternalMutex.
Le paramètre TimeOut définit l'intervalle du délai d'attente. Quand cet intervalle est écoulé, le mutex est réacquis, 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.