Watchdog.Sleep

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

Функция производит выключение (деактивацию) сторожевого пса. Деактивация будет произведена автоматически в момент удаления объекта из системы, если он был в активном состоянии в момент удаления. Функция может использоваться только в консольном клиенте. Замечание: при выполнении команды Sleep система может ждать до 100 мс. момента деактивации пса, и возвратит 0, если деактивация неудачна (вероятность такого события достаточно мала), реальное среднее время ожидания в этом случае может находиться в диапазоне 11..14 мс. Если же объект активного сторожевого пса уничтожается (переменная инициализируется нулем или удаляется при выходе из функции), система не будет ожидать деактивации пса (деактивация будет проходить асинхронно), поэтому, если пес создается и удаляется достаточно часто, возможно, выгоднее удалять его объект, вместо вызова функции Sleep.

Синтаксис

Watchdog.Sleep():<Сторожевой пес удачно деактивирован 1 или 0 (INT)>

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

Функция возвращает 1, если пес удачно деактивирован, иначе 0 (пес не был активирован, не консольный клиент и пр.)

Примеры

//Создаем новый объект пса с режимом перезагрузки
wd:=WatchDog.Create(0);
//Производим включение сторожевого пса с периодом в 30 сек.
wd.Guard(30000);

//В лог будет выведено "Отладка, активность/режим: 1/0"
Message("Отладка, активность/режим: "+wd.Active+"/"+wd.Mode);

//Создаем OLE-объект компоненты весов
Try
  Уст:=CreateOLE("LP16DLLCOM.lp16");
  Уст.ip:="192.168.0.1";
  Уст.port:=8111;
  Уст.Connect();
Except
  Message("Не зарегистрирована компонента весов LP16DLLCOM.dll, либо весы не настроены, обратитесь к администратору!","!");
  Exit 0;
EndTry;

//Производим выгрузку информации в весы. Компонента весов этой марки имеет тенденцию зависать, если во время выгрузки оператор попробует провести работу с весами.
//Т -- текстовый файл с информацией в виде "PLU номер;Цена;Сообщение;Срок;Тара;Группа;Полное имя;Код;Лого;Текстовое Лого"
For i:=1 to T.Size() Do
  s:=T.GetLine(i);

  If i%10=0 Then
    Message("Выгружено "+i+" из "+T.Size());
  EndIf;

  Try
    //Выгружаем строку текстового файла -- один товар
    Уст.PLUNO:=Number(Trunc(tearStr(s,";")));
    Уст.PRICE:=Number(Trunc(tearStr(s,";")));
    Уст.MSG:=Number(Trunc(tearStr(s,";")));
    Уст.LIFE:=Number(Trunc(tearStr(s,";")));
    Уст.TARE:=Number(Trunc(tearStr(s,";")));
    Уст.groupcode:=Number(Trunc(tearStr(s,";")));
        
    //Имя размещается в одной или двух строках с максимальной длиной в 28 символов
    Стр:=Replace(tearStr(s,";"),"@",";");
    s2:=Left(Стр,28);
    if Length(s2)=0 Then
      s2:=" ";
    EndIf;
    Уст.MSG1:=s2;
    s2:=Mid(Стр,29,28);
    if Length(s2)=0 Then
      s2:=" ";
    EndIf;
    Уст.MSG2:=s2;

    Уст.ITEM:=tearStr(s,";");
    Уст.NumberLogo:=Number(Trunc(tearStr(s,";")));

    s2:=tearStr(s,";");
    if Length(s2)>0 Then
      Уст.LogoStr:=s2;
    EndIf;
    Уст.SendPLU();
  Except
    Message("Не удалось отправить товар "+Стр+" в весы! Повторите выгрузку!","!");
    Exit;
  EndTry;

  //После выгрузки одной строки производим обновление времени ожидания пса.
  //Если в момент вызова Уст.SendPLU() произошло зависание, пес, не дождавшись команды Feed() произведет перезагрузку клиента
  wd.Feed();
EndDo;

Try
  Уст.Disconnect();
Except
EndTry;

//Выключаем сторожевого пса (система сделала бы это автоматически при выходе из текущей функции, так как переменная wd была бы уничтожена, 
//  поэтому все инструкции Exit в данном примере не используют конструкцию Try ... Finally)
wd.Sleep();