收藏 分销(赏)

对AEECallback结构体及其基础函数的分析.doc

上传人:仙人****88 文档编号:12021241 上传时间:2025-08-28 格式:DOC 页数:2 大小:29KB 下载积分:10 金币
下载 相关 举报
对AEECallback结构体及其基础函数的分析.doc_第1页
第1页 / 共2页
对AEECallback结构体及其基础函数的分析.doc_第2页
第2页 / 共2页
本文档共2页,全文阅读请下载到手机保存,查看更方便
资源描述
对AEECallback结构体及其基础函数的分析 typedef struct _AEECallback AEECallback; struct _AEECallback {  AEECallback *pNext;  //保留,并且调用程序不得修改此成员  void        *pmc;  //保留,并且调用程序不得修改此成员  PFNCBCANCEL  pfnCancel;  //回调被取消时,指向回调处理程序所调用函数的指针。调用程序必须将此指针设置为 NULL。  void        *pCancelData; //传递给 pfnCancel 的数据。 调用程序不得修改此成员。  PFNNOTIFY    pfnNotify;  //AEE 调用的回调函数。调用程序必须将此指针设为指向 AEE 回调处理程序所调用的函数。  void        *pNotifyData; //传递给 pfnNotify 的数据,调用程序必须将此指针设为指向须传递给 pfnNotify函数的数据。  void        *pReserved;  //保留,并由回调处理程序使用此成员 }; 该结构体,前两个参数pNext和pmc都是不可修改的,是系统维护其值;pfnCancel和pCancelData是在取消回调时使用的;pfnNotify和pNotifyData是在回调时使用的;最后一个pReserved是保留参数,可以存储任何数据。 AEECallback_Setup函数: 1、通过CALLBACK_Cancel宏调用了pcb中的pfnCancel函数。 2、给pfnCancel赋值,给pCancelData赋值 3、给pReserved赋值,其值是pfnCancelNotify 备注:猜想该函数的功能就是为pcb结构体赋值,按次序分别是pfnCancel、pCancelData、pReserved static void AEECallback_Setup(AEECallback *pcb, PFNCBCANCEL pfnCancel,                               void *pvCancel, PFNSCHEDNOTIFY pfnCancelNotify) {    CALLBACK_Cancel(pcb);    pcb->pfnCancel   = pfnCancel;    pcb->pCancelData = pvCancel;    pcb->pReserved   = (void *)pfnCancelNotify; } AEECallback_Fire函数: 1、把参数强制类型转换为AEECallback类型 2、把pfnCancel赋值为0 3、调用pfnNotify函数 备注:猜想该函数的功能就是调用notify函数 static void AEECallback_Fire(void *pvCxt) {    AEECallback *pcb = (AEECallback *)pvCxt;    pcb->pfnCancel = 0;    pcb->pfnNotify(pcb->pNotifyData); } AEECallback_CancelNotify函数: 1、从pReserved指针中取出保存的pfnCancelNofity,并且强制类型转换,猜想该成员的职责就是保存一些需要保存的指针 2、把pfnCancel置为0 3、调用pfnCancelNotify函数 备注:该函数其实就是要调用其中的CancelNotify函数,只是该函数指针保存在了void类型的pReserved成员里头,需要进行强制类型转换,注意的一点是在调用notify类函数的时候都把pfcCancel置为了0,不知道是何用意 static void AEECallback_CancelNotify(AEECallback *pcb) {    PFNSCHEDNOTIFY pfnCancelNotify = (PFNSCHEDNOTIFY)pcb->pReserved;    pcb->pfnCancel = 0;    pfnCancelNotify(pcb->pCancelData, AEECallback_Fire, pcb); } AEECallback_SchedNotifyWait函数: 1、先通过AEECallback_Setup函数来填充pcb结构体 2、再调用pfnSched函数 备注:不明白这个函数什么意思 void AEECallback_SchedNotifyWait(AEECallback *pcb, void *pSchedNotifyObj,                                  PFNSCHEDNOTIFY pfnSched,                                  PFNSCHEDNOTIFY pfnCancel) {    AEECallback_Setup(pcb, AEECallback_CancelNotify, pSchedNotifyObj, pfnCancel);    pfnSched(pSchedNotifyObj, AEECallback_Fire, pcb); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服