Приложения
Приложение А. Функции, константы и структуры 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.