这是Live555源码阅读的第二部分,包括了任务调度相关的三个类。任务调度是Live555源码中很重要的部分。

任务调度是Live555源码中很重要的部分。前面介绍的基本组件类在这里都用到了。
任务调度部分有三个类,其有继承关系。
抽象基类TaskScheduler 派生出 BasicTaskScheduler0BasicTaskScheduler0 再派生出BasicTaskScheduler

TaskScheduler主要是一些接口的定义。

BasicTaskScheduler0主要实现了触发事件的管理。触发事件其主要有三个要素,分别是触发调用函数,数据参数,和等待触发掩码。其中触发调用函数地址保存在函数指针数组中(触发函数类型是:void TaskFunc(void* clientData)),数据参数保存在数据参数指针数组里(void*),等待触发掩码是用于控制其在doEventLoop调用的SingleStep中是否被触发的标识。

BasicTaskScheduler是任务调度器的最终成果。它包含了上述两者,并加入了延时队列DelayQueue和处理程序链表HandlerSet成员。在SingleStep中使用了select 非阻塞I/O模型来进行处理fHandlerSet链表中的处理程序对象。fHandlerSet中的链表节点成员是HandlerDescriptor对象类型,其有四个重要的成员(socketNum/conditionSet/handlerProc/clientData),在前面介绍过,这里再提一下。socketNum用来标识节点,在这里应当会赋予一个网络socket套接口给它;handlerProc是调用的函数的地址,其类型是TaskScheduler::BackgroundHandlerProc*,而BackgroundHandlerProc的类型是void BackgroundHandlerProc(void* clientData, int mask),所以其是一个类成员函数指针类型 。clientDataconditionSet都是其参数,其中conditionSet是用于socketNum的读、写、异常操作的的掩码。

17 任务调度相关类综述——Live555源码阅读(一)任务调度相关类-LMLPHP

04-21 10:47