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

Описания RDS

Приложения

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

А.2. События блока и связанные с ними описания

А.2.4. События общего назначения

А.2.4.11. RDS_BFM_LOADSTATE – загрузка состояния блока

# Приложения

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

### А.2. События блока и связанные с ними описания

#### А.2.4. События общего назначения

##### А.2.4.11. RDS_BFM_LOADSTATE – загрузка состояния блока

Поток, в котором вызывается функция модели

Главный поток RDS или поток расчета (тот же поток, в котором вызвана сервисная функция загрузки состояния блока rdsLoadSystemState).

Первый параметр функции модели (int CallMode)

Константа RDS_BFM_LOADSTATE.

Третий параметр функции модели (void *ExtParam)

Не используется (NULL).

Возвращаемое функцией модели значение

Не используется, можно возвращать любое значение.

Примечания

Реакция на событие RDS_BFM_LOADSTATE вызывается в процессе работы сервисной функции rdsLoadSystemState для восстановления состояния каждого блока, ранее сохраненного функцией rdsSaveSystemState. В этой реакции модель должна загрузить из памяти все данные, сохраненные в реакции на событие RDS_BFM_SAVESTATE.

Сохранение и загрузка состояния одного или нескольких блоков используется в RDS для управления расчетом: вызовом сервисной функции rdsSaveSystemState можно сохранить в памяти текущее состояние одного или нескольких блоков, а затем, вызвав rdsLoadSystemState, вернуть эти блоки в запомненное состояние. Таких сохраненных состояний может быть сколько угодно – при сохранении каждое получает уникальный целый идентификатор, который используется в функции rdsLoadSystemState для указания конкретного восстанавливаемого состояния. При сохранении состояния значения статических переменных блока записываются в память автоматически, а все остальные данные должны быть сохранены моделью при помощи вызова rdsWriteBlockData в реакции на событие RDS_BFM_SAVESTATE. Загрузка сохраненных моделью данных в реакции на событие RDS_BFM_LOADSTATE осуществляется вызовом rdsReadBlockData. Сохранение и загрузка состояний блоков и подсистем подробно описана в §2.14.3 руководства программиста.

Пример

Пример сохранения и загрузки переменных, хранящихся в личной области данных блока.

      // Структура личной области данных блока
      typedef struct
      { // Переменные состояния
        int IntState;
        double DoubleState;
      } TMyBlockData2;

      // Модель блока
      extern "C" __declspec(dllexport) int RDSCALL Model2(
        int CallMode,             // Событие
        RDS_PBLOCKDATA BlockData, // Данные блока
        LPVOID ExtParam)          // Дополнительные параметры
      { TMyBlockData2 *data=(TMyBlockData*)(BlockData->BlockData);
        switch(CallMode)
          {
        ...
            case RDS_BFM_SAVESTATE:	// Сохранение состояния
              rdsWriteBlockData(&IntState,sizeof(IntState));
              rdsWriteBlockData(&DoubleState,sizeof(DoubleState));
              break;
            case RDS_BFM_LOADSTATE:	// Загрузка состояния
              rdsReadBlockData(&IntState,sizeof(IntState));
              rdsReadBlockData(&DoubleState,sizeof(DoubleState));
              break;
        ...
          }
        return RDS_BFR_DONE;
      }

См. также

RDS_BFM_SAVESTATE, rdsLoadSystemState, rdsDeleteSystemState, rdsSaveSystemState, rdsReadBlockData, rdsWriteBlockData.