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