DBIsStringMutexLocked

From SunFlurry wiki
Jump to: navigation, search
  DBIsStringMutexLocked (Серверные функции)
Объект:Функции общего назначения
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер
Исключения:Невозможно превратить в строку
Визуальность:Нет

Функция проверяет, заблокирован ли именованный серверный семафор, и возвращает данные пользователя, который его заблокировал при необходимости. См. также функцию DBLockStringMutex.

Синтаксис

DBIsStringMutexLocked(<Имя семафора (STRING)>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<Результат (INT)>

Аргументы

  • <Имя семафора (STRING)> - Имя серверного семафора, который необходимо проверить
  • <Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)> - (возможен аргумент-переменная (ByRef)) (необязательный аргумент) Переменные, получающие информацию о том, кто, где и в какое время произвел блокировку семафора, если он заблокирован. Если семафор заблокирован в текущем потоке, либо не заблокирован, значение этих переменных не изменяется.

Возвращаемое значение

Возвращает число, которое может принимать следующие значения:

  • 0 -- семафор не заблокирован на сервере
  • 1 -- семафор заблокирован из текущего потока (т.е., текущий поток является владельцем семафора).
  • 2 -- семафор заблокирован из какого-либо другого потока, либо из другой сессии. В этом случае будет заполнена информация о пользователе, машине и времени блокировки.


Примеры

//Блок может использовать для информативной проверки возможности совершить обмен. До начала обмена, однако, 
//  правильнее использовать функцию DBLockStringMutex для нахождения пользователя который уже его осуществляет.
ИмяБлок:="Обмен с центральной базой";
аПольз:="";аМаш:="";аДата:="";
If DBIsStringMutexLocked(ИмяБлок,аПольз,аМаш,аДата)=2 Then
  Message("Обмен с центральной базой уже выполняет пользователь "+аПольз+" ("+аМаш+"), начало "+аДата+"! Дождитесь окончания предыдущего обмена!","!");
Else
  Message("В данный момент обмен с центральной базой не выполняется!");
EndIf;