Difference between revisions of "DBIsStringMutexLocked"

From SunFlurry wiki
Jump to: navigation, search
m (1 revision imported)
1>Admin
Line 4: Line 4:
 
|caption=Серверные функции
 
|caption=Серверные функции
 
|type=1
 
|type=1
|status=0
+
|status=2
 
|db=1
 
|db=1
 
|exception=Невозможно превратить в строку
 
|exception=Невозможно превратить в строку
Line 21: Line 21:
 
==== Аргументы ====
 
==== Аргументы ====
 
* <code>''<Имя семафора (STRING)>''</code> - Имя серверного семафора, который необходимо проверить
 
* <code>''<Имя семафора (STRING)>''</code> - Имя серверного семафора, который необходимо проверить
* <code>''<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>''</code> - {{ByRef}} {{Optional}} Переменные, получающие информацию о том, кто, где и в какое время произвел блокировку семафора, если он заблокирован.
+
* <code>''<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>''</code> - {{ByRef}} {{Optional}} Переменные, получающие информацию о том, кто, где и в какое время произвел блокировку семафора, если он заблокирован. Если семафор заблокирован в текущем потоке, либо не заблокирован, значение этих переменных не изменяется.
  
 
==== Возвращаемое значение ====
 
==== Возвращаемое значение ====
Возвращает 1, если семафор заблокирован, иначе возвращает 0.
+
Возвращает число, которое может принимать следующие значения:
 +
* ''0'' -- семафор не заблокирован на сервере
 +
* ''1'' -- семафор заблокирован из текущего потока (т.е., текущий поток является владельцем семафора).
 +
* ''2'' -- семафор заблокирован из какого-либо другого потока, либо из другой сессии. В этом случае будет заполнена информация о пользователе, машине и времени блокировки.
  
  
 
== Примеры ==
 
== Примеры ==
 
<pre>
 
<pre>
//Блок позволяет проверить, выполняется ли уже обмен с центральной базой
+
//Блок может использовать для информативной проверки возможности совершить обмен. До начала обмена, однако,
 +
//  правильнее использовать функцию DBLockStringMutex для нахождения пользователя который уже его осуществляет.
 
ИмяБлок:="Обмен с центральной базой";
 
ИмяБлок:="Обмен с центральной базой";
 
аПольз:="";аМаш:="";аДата:="";
 
аПольз:="";аМаш:="";аДата:="";
If DBIsStringMutexLocked(ИмяБлок,аПольз,аМаш,аДата) Then
+
If DBIsStringMutexLocked(ИмяБлок,аПольз,аМаш,аДата)=2 Then
   Message("Обмен с с центральной базой уже выполняет пользователь "+аПольз+" ("+аМаш+"), начало "+аДата+"! Дождитесь окончания предыдущего обмена!","!");
+
   Message("Обмен с центральной базой уже выполняет пользователь "+аПольз+" ("+аМаш+"), начало "+аДата+"! Дождитесь окончания предыдущего обмена!","!");
 
Else
 
Else
 
   Message("В данный момент обмен с центральной базой не выполняется!");
 
   Message("В данный момент обмен с центральной базой не выполняется!");
 
EndIf;
 
EndIf;
 
</pre>
 
</pre>

Revision as of 11:53, 21 March 2021

  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;