Текущий раздел:

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.30. Вспомогательный объект для вывода индикатора выполнения

А.5.30.5. Команда RDS_PBAR_POSITION – текущая позиция индикатора

# Приложения

## Приложение А. Функции, константы и структуры RDS

### А.5. Сервисные функции и макросы RDS

#### А.5.30. Вспомогательный объект для вывода индикатора выполнения

##### А.5.30.5. Команда RDS_PBAR_POSITION – текущая позиция индикатора

Команда RDS_PBAR_POSITION позволяет считывать и устанавливать текущую позицию индикатора, определяющую степень его заполненности.

Вызов команды для установки

      int iPos= … // Позиция индикатора
      rdsSetObjectInt(Bar,RDS_PBAR_POSITION,0,iPos);

Вызов команды для чтения

      int iPos=rdsGetObjectInt(Bar,RDS_PBAR_POSITION,0);

Параметры и результат

Bar(RDS_HOBJECT)
  Идентификатор вспомогательного объекта для работы с индикатором, ранее созданного функцией rdsPBARCreate.
iPos(int)
  Значение текущей позиции индикатора.

Примечания

Эта команда позволяет установить индикатор в новую произвольную позицию (изменения немедленно отразятся в окне этого индикатора). Если число шагов операции, ход которой нужно отражать на индикаторе, очень велико, прямая установка может оказаться удобнее пошагового изменения командой RDS_PBAR_ADDTOPOS. При большом количестве элементарных операций, каждая из которых занимает немного процессорного времени, суммарные накладные расходы на обновление индикатора на каждом шаге могут оказаться больше времени выполнения самой операции. В таких случаях удобнее обновлять индикатор не на каждом шаге, а с заданным интервалом по времени. Этого можно добиться, например, циклом следующего вида:

      int Total= …       // Общее число шагов операции
      DWORD LastUpdate;  // Время последнего обновления индикатора
      RDS_HOBJECT Bar=rdsPBARCreateW(Total,L"Выполнение...");
      rdsCommandObject(Bar,RDS_PBAR_SHOW); // Показать индикатор
      LastUpdate=GetTickCount();
      for(int i=0;i<Total;i++)
        { DWORD time=GetTickCount(); // Текущее время
          if(time-LastUpdate>1000) // Прошло > 1 сек
            { LastUpdate=time; // Новое время обновления
              rdsSetObjectInt(Bar,RDS_PBAR_POSITION,0,i);
            }
          … какие-то действия …
        } // for(int i=0;...)
      rdsDeleteObject(Bar); // Удаление индикатора

Здесь для определения интервала времени используется функция Windows API GetTickCount, возвращающая время в миллисекундах, прошедшее с момента загрузки системы.

См. также

rdsPBARCreate, rdsSetObjectInt, rdsGetObjectInt.