Демонстрация использования функций индикации состояния: UseProgress(), MESSAGE()

Автор:R-Style Softlab
Дата:17.10.2002
Просмотров:2694
Скачиваний:2077
Оценка:, Оценок - 1
Сохранить в файле

Обсудить в форуме

Описание

Пример использования индикаторов состояния:
- "градусника" - InitProgress(...), UseProgress()
- индикатора в строке состояния - Message(...)

Исследование изменения производительности (скорости выполнения макроса) в зависимости от выбранного способа индикации состояния.

См. подробнее комментари к макросу.

Текст примера

 /***************************************************************************
*   Головин Леонид                                         22-09-98
*i
*i  Демонстрация СОВМЕСТНОГО использования функций индикации состояния:
*i     InitProgress(...), UseProgress()
*i     MESSAGE()
*i
*i  Внимание!!! На отображение индикатора состояния инициируемого функцией
*i              InitProgress(...) уходит значительно меньше ресурсов, чем
*i              на отображение информации от функции MESSAGE(...). Это
*i              это связано с тем, что в цикле до 1000 первый обновится 100
*i              раз, а второй 1000 раз!!!
*i      Поэтому, если Вам важно быстродействие ваших макросов НЕ ИСПОЛЬЗУЙТЕ
*i         вообще НИКАКИХ индикаторов.
*i      Если желаете работать быстро, и видеть ход процесса используйте
*i          InitProgress(...).
*i      Если желаете работать КРАСИВО, но медленно используйте совместно
*i          InitProgress(...) и MESSAGE(...)
*i  Данный эффект можно проследить в работе макроса: до 50% он проходит быстро
*i  т.к. отображается только InitProgress(...), а вот от 50 до 100% макрос
*i  ползет, т.к. отображаются совместно оба индикатора InitProgress(...) 
*i  и MESSAGE(...)
*i
****************************************************************************
*/

i=0;
top=100000;

InitProgress(top                                                      /*Предельное значение*/ 
            ,"  ~C~трока статуса (нижняя) ~будет~ изменена на ~50%~ " /*Нижняя строка*/
            ," Тест индикаторов InitProgress(...) и MESSAGE(...)");   /*верхняя строка*/

WHILE (i<top)
   i=i+1;
   UseProgress(i);          
   IF( i > top/2 )
      MESSAGE("  ~"+string(i:5),"~  Индикатор начиная от числа ~"
             +STRING(INT(top/2):5)
             +"~  закрыл статус от InitProgress");
   END;
end;

remprogress;