Версия для печати темы (https://pro1c.org.ua/index.php?s=8af73b2ffff723fafa72295682bb20f2&showtopic=4701)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ 1С Предприятие 8 _ Исскуственный замедлитель выполнения кода 1С

Автор: Batchir 13.09.11, 22:47

Иногда возникает потребность в создании искусственного замедлителя выполняемого кода 1С.
В типовых решениях встречаются конструкции типа

к=0;
Пока к<100 Цикл
    к=к+1;
КонецЦикла;

или этой подобные. Всё бы ничего ... для одного пользователя ... с одним запущенным экземпляром 1С.
А когда речь идет о большой системе с большим количеством пользователей, то такие замедлители вводят в ступор, потому что в этот момент 1С начинает, не то что кушать, а именно жрать ресурсы компьютера(сервера), вызывая неоправданное замедление работы.
А если замедлитель используется часто и без него никак, то естественным образом начинается поиск как избежать этой проблемы.

Вот и я однажды столкнулся с такой проблемой. Но решение оказалось достаточно простым - использование утилиты sleep.exe.
Данная утилита позволяет сделать паузу в выполнении любого сценария (я не говорю только про 1С) на заданный в секундах промежуток времени. Утилита не входит в состав винды, но её можно найти в на просторах интернета (например http://pro1c.org.ua/redirect.php?http://wiki.oszone.net/images/5/56/Sleep.zip) и просто скопировать на любой компьютер (если мне не изменяет память, то в систем32)
При выполнении команды этой утилиты 1С просто останавливает выполнение кода, вообще не кушая ресурсы компьютера(сервера), как это делается при любой штатной реализации замедлителя.

А процедура на 8-ке выглядит примерно так
Процедура Пауза(КоличествоСекунд) Экспорт
   Попытка
    WSHShell = Новый COMОбъект("WScript.Shell");
    WSHShell.Run("sleep "+Формат(КоличествоСекунд, "ЧГ=0"),0,1);
   Исключение
    // если перенесут базу на другой компьютер, где нет этой утилиты, то можно описать замедлитель
    // средствами 1С или ничего не описывать и не делать паузу.    
    ВремяПаузы = ТекущаяДата();
    Пока (ТекущаяДата() - ВремяПаузы) < КоличествоСекунд Цикл
        //холостой цикл замедлителя, но жрущий ресурсы ПК
    КонецЦикла;    
   КонецПопытки
КонецПроцедуры

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua