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

Все

<- TryLockMutex() - Оглавление Thread - UnlockMutex()->