У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3748.8
Понадобилось мне сегодня сделать паузу в коде. Работа присходит на сервере, так что Предупреждение не подходит. Мотать цикл тоже не подходит, ибо грузит сильно проц. На просторах было найдено такое решение:
Почти ветеран
Группа: Местный
Сообщений: 522
Спасибо сказали: 136 раз
Рейтинг: 138.7
На "заре" программирования, меня учили, что передача управления на маркер и ожидание - это как минимум плохой код, и допустим только в крайнем случае...
Зачем нужна пауза?
Обычно в это время что-то происходит. Тогда этим "что-то" можно (нужно) управлять. Например запускается внешняя программа и нужно ждать ее окончания - тогда:
Перем oExec ЭкспортФункция ЗапуститьПрограмму()ЭкспортПопытка
WshShell = НОВЫЙ COMОбъект("WScript.Shell");
oExec = WshShell.Exec("d:\Program Files\Программа.exe");
//Сообщить(СокрЛП(oExec.Status), СтатусСообщения.Информация);//ИД= oExec.ProcessID;//Сообщить("ИД процесса:"+ИД, СтатусСообщения.Информация);ВозвратИстина;
Исключение
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
oExec=Неопределено;
ВозвратЛожь;
КонецПопытки;
КонецФункцииПроцедура ЗакрытьПрограмму()Экспорт
СостояниеПрограммы=oExec.Status;
НомерПопытки=0;
Пока СостояниеПрограммы=0Цикл//ОбработкаПрерыванияПользователя();
НомерПопытки=НомерПопытки+1;
Состояние("Закрытие ПРОГРАММЫ - "+СокрЛП(НомерПопытки));
oExec.Terminate();
СостояниеПрограммы=oExec.Status;
Если НомерПопытки>50Тогда
Сообщить("Не смогли выгрузить ПРОГРАММУ за 50 попыток", СтатусСообщения.Внимание);
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры;
Тогда можно ожидать окончания программы - СостояниеПрограммы=oExec.Status;
Как правило, и в других ситуациях есть решение - просто нужно "сформулировать вопрос по другому"
Сообщение отредактировал Vofka - 11.10.12, 9:00
Я можу зробити цю роботу: - Швидко - Якісно - Дешево
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3748.8
yaxus , не пробовал ещё, но возьму на заметку . Хотя поторопился. Тоже ж цикл используете.. add: хотя, если добавлять таймаут, то ваш вариант имеет место быть
AnryMc, замечательно. Вот только про цикл я писал в самом первом сообщении.
Цитата(AnryMc @ 11.10.12, 9:58)
передача управления на маркер и ожидание - это как минимум плохой код
Про1С-ник
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0
Цитата(TipsyKID @ 18.07.14, 8:41)
а вот тут вообще не понял, делали замеры производительности ( пруфы плз. ) ?
Дело не в замерах производительности (и зачем сразу требовать пруфы?), субъективные ощущения реализации, делать форму, подключать обработчик, это слишком сложно для задачи где нужна пауза в пол секунды.
Личные бесплатные консультации не даю, для этого есть форум!
Дело не в замерах производительности (и зачем сразу требовать пруфы?), субъективные ощущения реализации, делать форму, подключать обработчик, это слишком сложно для задачи где нужна пауза в пол секунды.
5-ть минут на реализацию этого метода, малая цена за кроссплатформенность.
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины
Вставлю свои 5 коп., хотя в 8-й версии не пишу. В 7.7. очень хорошо с таким заданием справляется DialMail.dll и мне что-то кажется что 8-я ее тоже поддерживает.
Синтаксис на 7.7. Ожидание(<Мсек>); Назначение Приостанавливает работу 1С на <Мсек> миллисекунд без загрузки процессора. Окно 1С в данное время не перерисовывается. Возвращаемое значение: НЕТ Параметры: <Мсек> - число. Количество миллисекунд ожидания.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!