这是Live555源码阅读的第二部分,包括了任务调度相关的三个类。任务调度是Live555源码中很重要的部分。
本文由乌合之众 lym瞎编,欢迎转载
http://www.cnblogs.com/oloroso/
本文由乌合之众 lym瞎编,欢迎转载my.oschina.net/oloroso
任务调度是Live555源码中很重要的部分。前面介绍的基本组件类在这里都用到了。
任务调度部分有三个类,其有继承关系。
抽象基类TaskScheduler
派生出 BasicTaskScheduler0
,BasicTaskScheduler0
再派生出BasicTaskScheduler
。
TaskScheduler主要是一些接口的定义。
BasicTaskScheduler0
主要实现了触发事件的管理。触发事件其主要有三个要素,分别是触发调用函数,数据参数,和等待触发掩码。其中触发调用函数地址保存在函数指针数组中(触发函数类型是:void TaskFunc(void* clientData)
),数据参数保存在数据参数指针数组里(void*),等待触发掩码
是用于控制其在doEventLoop
调用的SingleStep
中是否被触发的标识。
BasicTaskScheduler
是任务调度器的最终成果。它包含了上述两者,并加入了延时队列DelayQueue
和处理程序链表HandlerSet
成员。在SingleStep
中使用了select
非阻塞I/O模型来进行处理fHandlerSe
t链表中的处理程序对象。fHandlerSet
中的链表节点成员是HandlerDescriptor
对象类型,其有四个重要的成员(socketNum/conditionSet/handlerProc/clientData)
,在前面介绍过,这里再提一下。socketNum
用来标识节点,在这里应当会赋予一个网络socket
套接口给它;handlerProc
是调用的函数的地址,其类型是TaskScheduler::BackgroundHandlerProc*
,而BackgroundHandlerProc
的类型是void BackgroundHandlerProc(void* clientData, int mask)
,所以其是一个类成员函数指针类型 。clientData
和conditionSet
都是其参数,其中conditionSet
是用于socketNum
的读、写、异常操作的的掩码。