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
Все