PureBasic
TrySemaphore()
Синтаксис
Result = TrySemaphore(Semaphore)
Описание
Уменьшает внутренний счётчик Семафора на единицу только если его значение больше 0. Это то же, что и операция WaitSemaphore(), но без блокировки если счётчик достиг 0.
Параметры
Semaphore Номер, идентифицирующий используемый объект Семафор.
Возвращаемое значение
Возвращает не нулевое значение, если счётчик Семафора был уменьшен, или 0 если счётчик невозможно уменьшить, потому что он уже равен нулю.
Пример (Фран)
Global ThreadSemaphore = CreateSemaphore()
Procedure MyThread(val)
Debug "Поток ок"
Repeat
Debug "Текущий поток"
Debug "Чтобы выйти, вернитесь на консоль и нажмите 'Esc'"
ShowDebugOutput()
ClearDebugOutput()
Delay(2000)
For i = 1 To 5
Debug x
x + 1
Next i
Delay(1000)
Until TrySemaphore(ThreadSemaphore)
Debug "Поток закрыт"
EndProcedure
Thread = CreateThread(@MyThread(), 0)
If OpenConsole()
PrintN("Нажмите клавишу.")
PrintN("Нажмите [Esc], чтобы выйти")
Repeat
KeyPressed$ = Inkey()
If KeyPressed$ <> ""
PrintN("Вы нажали: " + KeyPressed$)
PrintN("Её числовой идентификатор: "+Str(RawKey()))
ElseIf RawKey()
PrintN("Вы нажали клавишу, которая не является буквенно-цифровой.")
PrintN("Её числовой идентификатор: "+Str(RawKey()))
Else
Delay(20) ; Избегайте монополизации всего процессорного времени. Полезно для многозадачной ОС.
EndIf
Until KeyPressed$ = Chr(27) ; Ожидает, пока не будет нажата клавиша [Escape]
EndIf
If IsThread(Thread)
SignalSemaphore(ThreadSemaphore)
EndIf
End
Поддерживаемые OS
Все