Цитата:
Сообщение от
ivas
код:
PHP код:
#Define.LoopCount(100000)
static void Job1(Args _args)
{
SysOperationProgress pBar = new SysOperationProgress();
int time = timeNow();
int i, j;
;
pBar.setCaption("Обработка");
pBar.setCount(#LoopCount);
for (i = 0; i < #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(), люди!