Показать сообщение отдельно
Старый 19.04.2007, 10:27   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ivas Посмотреть сообщение
код:
PHP код:
#Define.LoopCount(100000)
static void Job1(Args _args)
{
    
SysOperationProgress pBar = new SysOperationProgress();
    
int time timeNow();
    
int ij;
    ;
    
pBar.setCaption("Обработка");
    
pBar.setCount(#LoopCount);
    
for (0#LoopCount; i++)
    
{
        
pBar.setText(strfmt("Операция № %1"i));
        
pBar.incCount();
        
j++;
    }
    
info(strfmt("Прошло: %1 сек."timeNow() - time));

c прогресс баром работает минуту
без < 1сек
а если у нас 10 000 000 циклов (например бежим по InventTrans)
получается прогресс бар отожрет почти 2 часа
Еще бы. Этот цикл ничего кроме показа прогресс бара и не делает.

Представьте нормальную работу... Представили?

Нет-нет, вы представьте действительно нормальную работу Аксапты: в каждом цикле делается поиск, расчет какой-нибудь себестоимости, проверка какого-нибудь дурацкого кредитного лимита, запись результатов расчета по нескольким таблицам, неизбежные блокировки...

Как вы думаете, сколько часов займет в Аксапте выполнение 10млн циклов при НОРМАЛЬНОЙ работе? Вы предлагаете пользователю ждать все это время, не имея никакой информации о ходе работ? Я правильно понимаю, что вы предлагаете пользователю сидеть несколько часов-суток перед пустым экраном? Я не ошибся?

Да, прогресс-бар сам занимает некоторое количество ресурсов.
Но его польза при больших нормальных обработках гораздо больше, нежели какие-то жалкие несколько процентов дополнительного времени...

Возвращаясь к вашему коду.
Вы просто не умеете его готовить.
Во-первых, вы не установили setTotal.
Во-вторых, если отображение прогресс-бара выполняет дольше чем сама работа, то надо пользоваться методом UpdateInterval(), чтобы установить большее время между обновлениями.

Посмотрите же в метод update(), люди!
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: alex55 (1).