Live555源码阅读笔记(二):UsageEnvironment 目录详解

简介: Live555源码阅读笔记(二):UsageEnvironment 目录详解

一、UsageEnvironment 目录介绍

2018122814580746.png

这个目录包括了8个源码文件,主要内容是定义了3个抽象类,“UsageEnvironment”类和“TaskScheduler”类用于调度延迟任务、为异步读取事件分配任务 以及 输出错误/警告消息。 此外,“HashTable”类定义了通用哈希表的接口,供其余代码使用。因为这个目录代码量少,且代码简单与其他库没太多关联,所以放在陈述。

二、阅读源码

1、UsageEnvironment 类

UsageEnvironment 类是一个抽象基类,它定义了好几个纯虚函数,用来规范(要实例化的)子类必须实现这些函数。这个类主要用来输出错误/警告信息的,整个类几乎都是纯虚函数,只需要了解这些纯虚函数大概是有什么用就行了。下面简单阐述一下。

1.1、跟 “错误/警告信息字符串” 相关的函数

typedef char const* MsgString;
virtual MsgString getResultMsg() const = 0;
virtual void setResultMsg(MsgString msg) = 0;
virtual void setResultMsg(MsgString msg1, MsgString msg2) = 0;
virtual void setResultMsg(MsgString msg1, MsgString msg2, MsgString msg3) = 0;
virtual void setResultErrMsg(MsgString msg, int err = 0) = 0;
virtual void appendToResultMsg(MsgString msg) = 0;
virtual void reportBackgroundError() = 0;

1.2、跟 “重载<<运算符” 相关的函数

// 'console' output:
virtual UsageEnvironment& operator<<(char const* str) = 0;
virtual UsageEnvironment& operator<<(int i) = 0;
virtual UsageEnvironment& operator<<(unsigned u) = 0;
virtual UsageEnvironment& operator<<(double d) = 0;
virtual UsageEnvironment& operator<<(void* p) = 0;

2、TaskScheduler 类

TaskScheduler  类也是一个抽象基类,同样定义了好几个纯虚函数要求子类实现,主要跟“任务调度”、“后台处理”、“事件触发器”相关。下面简单介绍一下。

2.1、延时任务相关

/* 
*功能:安排一个延时任务在下次调度点到达时调度
*参数:
*  microseconds: 延时的微妙数
*  proc:任务名称
*  clientData:传给任务的数据
*返回值:返回一个令牌(TaskToken),可以在任务被调度前调用 unscheduleDelayedTask()取消或者
*       调用 rescheduleDelayedTask() 重新安排该任务。
*/
virtual TaskToken scheduleDelayedTask(int64_t microseconds,TaskFunc* proc,void* clientData) = 0;
// 取消延迟指定的任务
virtual void unscheduleDelayedTask(TaskToken& prevTask) = 0;
// 重新安排延迟任务
virtual void rescheduleDelayedTask(TaskToken& task,
                     int64_t microseconds, TaskFunc* proc,
             void* clientData);
// 使任务在事件循环中进一步执行,
// 将延迟任务、后台I/O处理和其他事件作为单个控制线程按顺序处理。
virtual void doEventLoop(char volatile* watchVariable = NULL) = 0;

2.2、事件触发器相关

/* 创建一个事件触发器:将 eventHandlerProc 添加到事件循环中,并返回一个id,
如果id被触发,就从事件循环中调用 eventHandlerProc。*/
virtual EventTriggerId createEventTrigger(TaskFunc* eventHandlerProc) = 0;
// 删除一个事件触发器
virtual void deleteEventTrigger(EventTriggerId eventTriggerId) = 0;
// 触发事件:使事先创建的指定事件处理函数从事件循环中处理。
virtual void triggerEvent(EventTriggerId eventTriggerId, void* clientData = NULL) = 0;

2.3、后台处理相关

typedef void BackgroundHandlerProc(void* clientData, int mask);
    // Possible bits to set in "mask".  (These are deliberately defined
    // the same as those in Tcl, to make a Tcl-based subclass easy.)
    #define SOCKET_READABLE    (1<<1)
    #define SOCKET_WRITABLE    (1<<2)
    #define SOCKET_EXCEPTION   (1<<3)
virtual void setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData) = 0;
void disableBackgroundHandling(int socketNum) { setBackgroundHandling(socketNum, 0, NULL, NULL); }
virtual void moveSocketHandling(int oldSocketNum, int newSocketNum) = 0;

结合上面的介绍看代码,可以大概了解 TaskScheduler  类。

3、HashTable类

HashTable 类也是一个抽象基类,主要用于实现哈希表,感兴趣的,可以自己了解一下。

4、UsageEnvironment 目录其他文件

除了上面提及的3个类外,UsageEnvironment 目录就剩下的4个源文件了。

strDup.hh、strDup.cpp:实现字符串的复制,等同于标准 C 的 "strdup()"。

Boolean.hh:定义了布尔值

UsageEnvironment_version.hh:定义了当前源码的版本好


总结

UsageEnvironment 目录的代码数量很少,也浅显易懂,主要了解 UsageEnvironment 类 和 TaskScheduler  类规范了哪些行为即可。怕忘记了,在此记录一下。

补充说明:

1、上面阅读的代码是 2019.03.06 的

#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING    "2019.03.06"

2、涉及的C++知识

纯虚函数:

声明:virtual retType Fun() = 0; // retType 表示返回值类型、Fun-函数名
形式:
①最开头有 virtual 关键字
②没有函数体
③函数声明的末尾有“=0”,告诉编译系统“这是纯虚函数”,并不是返回值; 
作用:
①含有纯虚函数的类称为抽象类,抽象类只能被继承,不能实例化,可声明指向“实现该抽象类的具体类”的指针或引用。
②不能被调用,规范子类必须实现该函数(声明中不能有“=0”),否则报错
③没实现纯虚函数的子类,则该子类仍为抽象类
④实现了纯虚函数的子类,该纯虚函数在子类中就成了虚函数

const函数:

声明:retType Fun() const; // retType 表示返回值类型、Fun-函数名
形式:在函数名后面的括号加了 const 修饰
作用:
①const函数只能读取成员 不能修改,除非成员变量修饰成mutable
②const函数只能调用const函数 不能调用非const函数。


目录
相关文章
|
10月前
|
视频直播
详解!视频直播源码平台搭建开发:录制功能
视频直播源码平台的录制功能能够为用户提供更多方便、灵活性,同时也增加了直播内容的传播和价值,这也使录制功能成为布谷科技视频直播源码平台的必备功能之一。
详解!视频直播源码平台搭建开发:录制功能
|
11月前
|
视频直播 定位技术 UED
海外视频直播源码技术视频直播间的搭建
大家听到这里是不是感觉这个源码平台非常的熟悉,没错,这个源码平台就海外视频直播源码平台,而我说的这个房间就是视频直播间,主持人就是视频直播间内的主播,今天我就为大家分享海外视频直播源码技术视频直播间的搭建。
海外视频直播源码技术视频直播间的搭建
|
11月前
|
视频直播
视频直播源码技术知识分享:连麦功能(一)
我们开发视频直播平台就要去了解视频直播开发相关功能知识,这对我们开发平台有着重要的作用,连麦技术就是视频直播源码重要的技术功能之一,每一个功能技术都有自己的用武之地
视频直播源码技术知识分享:连麦功能(一)
|
域名解析 网络协议 安全
Live555源码阅读笔记(四):groupsock 目录详解
Live555源码阅读笔记(四):groupsock 目录详解
217 0
Live555源码阅读笔记(四):groupsock 目录详解
|
存储 调度
Live555源码阅读笔记(三):BasicUsageEnvironment 目录详解-BasicTaskScheduler、DelayQueue、HandlerSet
Live555源码阅读笔记(三):BasicUsageEnvironment 目录详解-BasicTaskScheduler、DelayQueue、HandlerSet
125 0
Live555源码阅读笔记(三):BasicUsageEnvironment 目录详解-BasicTaskScheduler、DelayQueue、HandlerSet
|
编解码 数据建模 Unix
Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构
Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构
265 0
Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构
|
视频直播
新人主播如何赚钱,3点告诉你视频直播源码的变现方式
全民直播的时代已经到来抓住,绝大多数人是发现了直播市场的红利期,想要分一杯羹,作为新人主播如何通过视频直播源码的功能来赚钱,首先要了解市场需求,明确自己的优势,凸显自己的竞争力。
新人主播如何赚钱,3点告诉你视频直播源码的变现方式
|
搜索推荐 视频直播
视频直播源码提高用户满意度必须要具有的特性
目前直播app应用开发市场已进入快速发展时期,不仅越来越多的直播app应用陆续投放到应用市场中,同时用户对于手机直播app应用软件的要求也越来越高。随着年轻用户群体的个性化需求提升,如何提高用户满意度,便成为了视频直播源码的开发最为关键的问题之一。  
视频直播源码提高用户满意度必须要具有的特性
|
视频直播
直播系统的顶梁柱:视频直播源码中的礼物功能
我们了解的直播系统功能是十分的实用且丰富的,一般来说,视频直播源码自带的功能有:直播功能、私信功能、邀请奖励、财务管理功能、短视频功能、直播PK功能、多种礼物功能、分享功能、拉黑功能、带货商城功能、家族功能、标签功能、评论功能等等实质性的功能,今天就针对礼物功能来做一下详细的介绍。
直播系统的顶梁柱:视频直播源码中的礼物功能
|
视频直播
短视频直播源码,使用URLConnection下载一张图片
短视频直播源码,使用URLConnection下载一张图片
287 0