WaitSemaphore()
Syntaxe
WaitSemaphore(Semaphore)Description
Diminue la valeur du compteur interne du sémaphore de un, ce qui a pour effet de bloquer le thread, si la valeur venait à tomber en dessous de zéro. Le thread sera débloqué dès qu'un autre thread appellera SignalSemaphore().
Arguments
Semaphore Le sémaphore à attendre.
Valeur de retour
Aucune.
Remarques
Le compteur maximal d'un sémaphore est limité à une valeur 32-bit signée, donc un maximum de 2147483647 appels à WaitSemaphore() peuvent être effectués sans être contre-balancés par des appels à SignalSemaphore().
Exemple
; Assurez vous que l'option "Activer la gestion des threads" est sélectionnée
;
Global Semaphore = CreateSemaphore()
Global Mutex = CreateMutex()
Global NewList Queue()
Procedure Producer(Total)
For i = 1 To Total
Delay(Random(750) + 250)
; L'accès à la liste nécessite tout de même un mutex pour être threadsafe
LockMutex(Mutex)
LastElement(Queue())
AddElement(Queue())
Queue() = i
UnlockMutex(Mutex)
; Envoie un signal pour indiquer qu'un nouvel élément est disponible
SignalSemaphore(Semaphore)
Next i
EndProcedure
If CreateThread(@Producer(), 30)
For i = 1 To 30
; Attente d'un nouvel élément
WaitSemaphore(Semaphore)
; Affiche l'état de la liste
LockMutex(Mutex)
Queue$ = "Queue:"
ForEach Queue()
Queue$ + " " + Str(Queue())
Next Queue()
Debug Queue$
; Efface le premier élément de la liste
FirstElement(Queue())
DeleteElement(Queue())
UnlockMutex(Mutex)
Next i
EndIf
Voir aussi
SignalSemaphore(), TrySemaphore()
OS Supportés
Tous