gifts2017

Таймер выполнения

Опубликовал Михаил Семенов (Shaman100M) в раздел Программирование - Практика программирования

Элементарная вещь: вывод времени выполнения процедуры. У меня работает давным-давно. В силу своей простоты можно пометить как "для новичков".
Нужно знать время выполнения обработок / отчетов? От нажатия кнопки "Выполнить" или "Сформировать" и до "Для получения подсказки нажмите F1" ? Это просто.

Заведем переменную в глобальном модуле, хранящую это время.
 
Перем глНашСчетчикВремени;


И простенькую процедурку там же.

// ВремяВыполнения(<Пар>,<Сигнализировать>)
//   процедура инициализирует / фиксирует прошедшее время
// Параметры
//   <Пар> - Число, 0 - инициализировать счетчик времени, 1 / 2 - вывести предупреждение /  сообщение
//        о прошедшем с момента инициализации времени.
//   <Сигнализировать> - число, 1 или 0 - подать при выводе рез-тов звуковой сигнал (по умолчанию 1, подать)
Процедура ВремяВыполнения(Знач Пар=1,Знач Сигнализировать=1) Экспорт
    Перем ПрошлоСекунд;
    Перем ПрошлоМинут;
    Перем ПрошлоЧасов;
    Перем Резт;
    Если Пар=0 Тогда
        глНашСчетчикВремени = _getperformancecounter();
    Иначе
        ПрошлоСекунд  = (_getperformancecounter()-глНашСчетчикВремени)/1000;
        ПрошлоЧасов   = Цел(ПрошлоСекунд/3600);
        ПрошлоМинут      = Цел(ПрошлоСекунд/60)%60;
        ПрошлоСекунд  = ПрошлоСекунд%60;                                           

        Резт  = Формат(ПрошлоЧасов,"Ч(0)"+Макс(2,СтрДлина(ПрошлоЧасов)))+":"+
    Формат(ПрошлоМинут,"Ч(0)2")+":"+
                Формат(ПрошлоСекунд,"Ч(0)2");
        Если Сигнализировать=1 Тогда
            // блямкнем, чтобы нас услышали
            Сигнал();
        КонецЕсли;
        Если Пар=1 Тогда
            ЧтоНажали    = Вопрос(Резт,0,60);
            Если ЧтоНажали    = 1 Тогда
            // пользователь на месте
            ИначеЕсли ЧтоНажали    = -1 Тогда    
                 // пользователя нет, время прошло, можно продублировать в окно сообщений
                 Сообщить("=======");
                 Сообщить(Резт,"i");
                 Сообщить("=======");
            КонецЕсли;                
        Иначе    
            Сообщить("=======");
            Сообщить(Резт,"i");
            Сообщить("=======");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры



Далее, пользуем в отчете:
 
 
Процедура Сформировать()
    ВремяВыполнения(0);
     
    // операторы
    
    ВремяВыполнения();
КонецПроцедуры


См. также

Подписаться Добавить вознаграждение

Комментарии

1. АЛьФ (АЛьФ) 09.03.07 20:58
И чем не угодил замер производительности в отладчике?
2. Михаил Семенов (Shaman100M) 11.03.07 16:17
отладчик для разработчика
3. АЛьФ (АЛьФ) 12.03.07 16:05
А зачем не разработчику знать время выполнения отчета? Ему интересней знать сколько времени осталось до конца выполнения. Для этого делают всякие прогресс-бары.
4. Михаил Семенов (Shaman100M) 12.03.07 16:38
Нужно знать конечное количество операций, это не всегда известно. Идея. Как вариант, сохранять его для заданных параметров от прошлого запуска обработки... В принципе, можно попробовать.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа