Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.13. Вызов функций блоков
А.5.13.4. rdsBroadcastFuncCallsDelayed – отложенный вызов функции всех блоков подсистемы
Функция rdsBroadcastFuncCallsDelayed ставит указанную функцию в очередь на выполнение для всех блоков указанной подсистемы. После этого управление немедленно возвращается модели вызвавшего блока, а модели блоков указанной подсистемы будут вызваны только после завершения этой модели.
void RDSCALL rdsBroadcastFuncCallsDelayed( RDS_BHANDLE Parent, // Подсистема с вызываемыми блоками int FuncId, // Идентификатор функции LPVOID pParamBuf, // Указатель на область параметров функции DWORD ParamBufSize, // Размер области параметров DWORD Flags // Флаги (RDS_BCALL_*) );
Тип указателя на эту функцию
RDS_VBhIpVDwDw
Параметры
- Parent (RDS_BHANDLE)
- Идентификатор подсистемы, у блоков которой будет вызываться функция (модели этих блоков будут реагировать на событие RDS_BFM_FUNCTIONCALL).
- FuncId (int)
- Целый идентификатор вызываемой функции, полученный при ее регистрации вызовом rdsRegisterFunction.
- pParamBuf (LPVOID)
- Указатель на область параметров функции, которая будет скопирована во внутреннюю память RDS. Область параметров не должна содержать внутри себя какие-либо указатели на другие области памяти и объекты. Может равняться NULL.
- ParamBufSize (DWORD)
- Размер (в байтах) области параметров, указатель на которую передан в pParams.
- Flags (DWORD)
- Один или несколько объединенных битовым ИЛИ флагов, управляющих вызовом функции:
RDS_BCALL_ALLOWSTOP Разрешить вызываемым моделям блоков прекращать дальнейшие вызовы присвоением значения TRUE полю Stop структуры RDS_FUNCTIONCALLDATA. RDS_BCALL_CHECKSUPPORT Перед вызовом проверить поддержку этой функции блоком, вызвав его модель для реакции на событие RDS_BFM_CHECKFUNCSUPPORT. В настоящее время этот режим практически не используется. RDS_BCALL_SUBSYSTEMS Вызывать функции у всех блоков внутри подсистемы Parent на всех уровнях иерархии (то есть не только у блоков и подсистем, непосредственно находящихся в Parent, но и у всех внутренних блоков этих подсистем). RDS_BCALL_FIRST Поставить вызов функции блоков в начало очереди (не может использоваться одновременно с RDS_BCALL_LAST). RDS_BCALL_LAST Поставить вызов функции блоков в конец очереди (не может использоваться одновременно с RDS_BCALL_FIRST).
Примечания
Вызов этой функции приводит к тому, что после завершения модели вызвавшего блока все модели блоков в подсистеме Parent будут последовательно (в произвольном порядке) вызываться для реакции на событие RDS_BFM_FUNCTIONCALL. Поля структуры данных функции RDS_FUNCTIONCALLDATA, указатель на которую передается в модель блока в параметре ExtParam, при этом будут заполнены следующим образом:
| Поле | Значение |
|---|---|
| int Function | значение параметра FuncId |
| LPVOID Data | указатель на внутреннюю область памяти RDS размером в ParamBufSize байтов, в которую скопирована область pParamBuf |
| RDS_BHANDLE Caller | идентификатор блока, из модели которого вызвана rdsBroadcastFuncCallsDelayed |
| BOOL Broadcast | TRUE |
| int BroadcastCnt | исходно – 0, увеличивается на 1 при вызове каждого следующего блока |
| BOOL Stop | исходно – FALSE, вызванная модель может присвоить TRUE, что прекратит вызов других моделей (при указании флага RDS_BCALL_ALLOWSTOP) |
| BOOL Delayed | TRUE |
| DWORD DataBufSize | значение параметра ParamBufSize |
Модели блоков, находящихся в Parent, будут вызываться до тех пор, пока не будут вызваны все, или пока какая-либо модель не присвоит полю Stop структуры RDS_FUNCTIONCALLDATA значение TRUE.
Отложенный вызов функций блоков рассматривается в §2.13.5 руководства программиста.
См. также
RDS_BFM_FUNCTIONCALL, RDS_FUNCTIONCALLDATA, rdsBroadcastFunctionCallsEx, rdsQueueCallBlockFunction, rdsRegisterFunction.