darwin之回调
来源:互联网 发布:php 断点续传 编辑:程序博客网 时间:2024/05/16 20:28
在darwin中定义了一个全局变量(结构体)sCallbacks,而这个结构体只有一个成员addr(数组),addr的每一个元素代表一个回调指针.
QTSS_Callbacks QTSServer::sCallbacks;
typedef struct { // Callback function pointer array QTSS_CallbackProcPtr addr [kLastCallback];} QTSS_Callbacks, *QTSS_CallbacksPtr;
typedef QTSS_Error (*QTSS_CallbackProcPtr)(...);
enum{ // Indexes for each callback routine. Addresses of the callback routines get // placed in an array. // IMPORTANT: When adding new callbacks, add only to the end of the list and increment the // kLastCallback value. Inserting or changing the index order will break dynamic modules // built with another release. kNewCallback = 0, kDeleteCallback = 1, kMillisecondsCallback = 2, kConvertToUnixTimeCallback = 3, kAddRoleCallback = 4, kAddAttributeCallback = 5, kIDForTagCallback = 6, kGetAttributePtrByIDCallback = 7, kGetAttributeByIDCallback = 8, kSetAttributeByIDCallback = 9, kWriteCallback = 10, kWriteVCallback = 11, kFlushCallback = 12, kAddServiceCallback = 13, kIDForServiceCallback = 14, kDoServiceCallback = 15, kSendRTSPHeadersCallback = 16, kAppendRTSPHeadersCallback = 17, kSendStandardRTSPCallback = 18, kAddRTPStreamCallback = 19, kPlayCallback = 20, kPauseCallback = 21, kTeardownCallback = 22, kRequestEventCallback = 23, kSetIdleTimerCallback = 24, kOpenFileObjectCallback = 25, kCloseFileObjectCallback = 26, kReadCallback = 27, kSeekCallback = 28, kAdviseCallback = 29, kGetNumValuesCallback = 30, kGetNumAttributesCallback = 31, kSignalStreamCallback = 32, kCreateSocketStreamCallback = 33, kDestroySocketStreamCallback = 34, kAddStaticAttributeCallback = 35, kAddInstanceAttributeCallback = 36, kRemoveInstanceAttributeCallback= 37, kGetAttrInfoByIndexCallback = 38, kGetAttrInfoByNameCallback = 39, kGetAttrInfoByIDCallback = 40, kGetValueAsStringCallback = 41, kTypeToTypeStringCallback = 42, kTypeStringToTypeCallback = 43, kStringToValueCallback = 44, kValueToStringCallback = 45, kRemoveValueCallback = 46, kRequestGlobalLockCallback = 47, kIsGlobalLockedCallback = 48, kUnlockGlobalLock = 49, kAuthenticateCallback = 50, kAuthorizeCallback = 51, kRefreshTimeOutCallback = 52, kCreateObjectValueCallback = 53, kCreateObjectTypeCallback = 54, kLockObjectCallback = 55, kUnlockObjectCallback = 56, kSetAttributePtrCallback = 57, kSetIntervalRoleTimerCallback = 58, kLockStdLibCallback = 59, kUnlockStdLibCallback = 60,kGetRTSPPushSessionsCallback= 61,kRelayRTPCallback = 62,kLastCallback = 63};
1.这个数组什么时候初始化呢?在InitCallbacks函数中对数组的每一个元素初始化
2.这个全局回调数组又是如何与模块关联的呢?
在编写模块的时候,必须要实现一个main函数:比如QTSSReflectorModule_Main。这个函数会被主程序调用,传进来的形参包含了全局回调函数指针。
而在QTSS_Private.cpp中:有全局变量指针:static QTSS_CallbacksPtr sCallbacks = NULL;在_stublibrary_main函数,实现全局变量的赋值 。
在模块中,都是调用QTSS_*的函数,这些函数都是在QTSS_Private.cpp中实现,而最终都是调用主程序中的全局回调函数。
3.全局变量(结构体)sCallbacks中的每一个元素指向的回调函数在哪里实现的呢?
在QTSSCallbacks类中实现:此类中实现了所有的静态回调函数。
4.所有的模块的qtss对象都要调用QTSSCallbacks中的方法,那么是如何区分不同的QTSS_Object?
方法1:在调用该类的函数时,函数中带有QTSS_Object参数, QTSSCallbacks其实什么也没做,函数内部直接调用
QTSS_Object对应的方法(一般方法名称都相同)即可。
方法2 :对于没有传入QTSS_Object参数的函数,通过OSThread临时存储一下变量值的方法来实现调用那个模块。
方法3:调用类的静态函数实现
5.QTSSCallbacks类中都可以调用哪些qtss的方法
主要有三种 : QTSS_Object,QTSS_ObjectType,QTSS_StreamRef
- darwin之回调
- darwin之OSRefTable使用
- darwin之解析字符串
- darwin之角色管理
- darwin之RTPSession
- darwin之数据包管理
- darwin之数据包管理
- darwin之ClientSession
- Darwin
- Darwin
- 【Darwin学习笔记】之EventThread
- 【Darwin学习笔记】之TaskThread
- 【Darwin学习笔记】之TaskThread
- 【Darwin学习笔记】之EventThread
- darwin之task线程分类
- darwin之qtss属性详解
- 【Darwin学习笔记】之RTSPSession点播流程
- 【Darwin学习笔记】之RTSPSession点播流程
- 分享式商业模型
- 计算机语言历史——C语言
- hihocoder上第180周《Nature Numbers》
- 学徒浅析Android——Android原生下载机制针对0K大小文件下载异常的分析
- NEFU 1270 智力异或(2)|| 2017icpc青岛站 热身赛 C (01字典树)
- darwin之回调
- C语言单元小结(5)
- 设计模式 —— 单例模式
- java中参数传递问题
- springboot+mybatis 查询一下
- 蓄水池算法
- 第二章 虚拟化技术
- 树形DP
- 3、MyBatis中DAO开发