Навигация:
<< >> Оглавление Указатель

Приложения

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

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

А.5.13. Вызов функций блоков

А.5.13.10. rdsQueueCallBlockFunction – отложенный вызов функции блока

Функция rdsQueueCallBlockFunction ставит указанную функцию указанного блока в очередь на выполнение. После этого управление немедленно возвращается модели вызвавшего функцию блока, а поставленная в очередь функция будет вызвана только после завершения этой модели.

  void  rdsQueueCallBlockFunction(
     Block,     // Вызываемый блок
    int FuncId,            // Идентификатор функции
     pParamBuf,      // Указатель на область параметров функции
     ParamBufSize,    // Размер области параметров
     Flags            // Флаги (RDS_BCALL_*)
  );

Тип указателя на эту функцию

RDS_VBhIpVDwDw

Параметры

Block (RDS_BHANDLE)
Идентификатор блока, функция которого будет вызвана (модель этого блока будет реагировать на событие RDS_BFM_FUNCTIONCALL).
FuncId (int)
Целый идентификатор вызываемой функции, полученный при ее регистрации вызовом rdsRegisterFunction.
pParamBuf (LPVOID)
Указатель на область параметров функции, которая будет скопирована во внутреннюю память RDS. Область параметров не должна содержать внутри себя какие-либо указатели на другие области памяти и объекты. Может равняться NULL.
ParamBufSize (DWORD)
Размер (в байтах) области параметров, указатель на которую передан в pParams.
vv (DWORD)
Один или несколько объединенных битовым ИЛИ флагов, управляющих вызовом функции:
RDS_BCALL_CHECKSUPPORT Перед вызовом проверить поддержку этой функции блоком, вызвав его модель для реакции на событие RDS_BFM_CHECKFUNCSUPPORT. В настоящее время этот режим практически не используется.
RDS_BCALL_FIRST Поставить вызов функции блока в начало очереди (не может использоваться одновременно с RDS_BCALL_LAST).
RDS_BCALL_LAST Поставить вызов функции блока в конец очереди (не может использоваться одновременно с RDS_BCALL_FIRST).

Примечания

Вызов этой функции приводит к постановке вызова модели блока Block для реакции на событие RDS_BFM_FUNCTIONCALL в начало или конец (в зависимости от флагов) специальной очереди. Вызовы функций из этой очереди будут выполнены последовательно после завершения модели вызвавшего функцию блока. Когда модель блока Block будет вызвана в режиме RDS_BFM_FUNCTIONCALL, поля структуры данных функции RDS_FUNCTIONCALLDATA, указатель на которую передается в модель блока в параметре ExtParam, будут заполнены следующим образом:

Поле Значение
int Function значение параметра FuncId
Data указатель на внутреннюю область памяти RDS размером в ParamBufSize байтов, в которую скопирована область pParamBuf
Caller идентификатор блока, из модели которого вызвана rdsCallBlockFunctionDelayed
Broadcast FALSE
int BroadcastCnt 0
Stop FALSE
Delayed TRUE
DataBufSize значение параметра ParamBufSize

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

Пример

Пример использования функции rdsQueueCallBlockFunction приведен в §2.13.5 руководства программиста.

См. также

RDS_BFM_FUNCTIONCALL, RDS_FUNCTIONCALLDATA, rdsCallBlockFunction, rdsCallBlockFunctionDelayed, rdsBroadcastFunctionCallsEx, rdsRegisterFunction.


<< >> Оглавление Указатель