24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

  • 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    • 简介
    • 下面是其定义
    • UsageEnvironment的构造与析构
    • reclaim方法(自我回收)
    • internalError方法(内部错误)

这是Live555源码阅读的第三部分,包括了UsageEnvironment相关的三个类。

本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso

简介

UsageEnvironment是一个抽象基类,其定义在live555sourcecontrol\UsageEnvironment\include\UsageEnvironment.hh文件中。

UsageEnvironment定义了三个数据成员, void*类型的指针liveMediaPrivgroupsockPriv(要注意这两者是public权限的,在使用环境相关类中都没有对它们进行初始化以外的操作),这两个在后面说GroupsockLiveMedia模块的时候就比较清楚了。还有一个很重要的是一个引用fScheduler,它告诉了我们,每一个使用环境必须绑定一个任务调度器。

下面是其定义

// An abstract base class, subclassed for each use of the library
// 一个抽象类,子类为每个使用库
class UsageEnvironment {
public://reclaim   vt.开拓,开垦; 感化; 取回; 沙化; n.改造,感化; 教化; 回收再利用; 收回,取回;//自我回收,如果liveMediaPriv或groupsockPriv这两个成员变量有一个为NULL,就delete this;void reclaim();// task scheduler:任务调度//直接返回对象内部的fScheduler成员TaskScheduler& taskScheduler() const { return fScheduler; }// result message handling://消息处理结果,注意这里是一个类型定义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;// like setResultMsg(), except that an 'errno' message is appended.  (If "err == 0", the "getErrno()" code is used instead.)//类似setResultMsg(),除了“errno”的消息被追加。(如果“err== 0”,“getErrno()”代码是用于替代。)virtual void appendToResultMsg(MsgString msg) = 0;virtual void reportBackgroundError() = 0;// used to report a (previously set) error message within//用于报告错误消息(预先设定)内的// a background event事件的背景virtual void internalError(); // used to 'handle' a 'should not occur'-type error condition within the library.// 'errno'virtual int getErrno() const = 0;// '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;// a pointer to additional, optional, client-specific state// 客户端特定的状态void* liveMediaPriv;void* groupsockPriv;protected://初始化liveMediaPriv(NULL), groupsockPriv(NULL), fScheduler(scheduler)UsageEnvironment(TaskScheduler& scheduler); // abstract base classvirtual ~UsageEnvironment(); // we are deleted only by reclaim()我们只有reclaim()删除private:TaskScheduler& fScheduler;
};

UsageEnvironment的构造与析构

其构造的时候需要一个TaskScheduler对象来用于绑定,另外两个成员都被初始化为了NULL。稍带提一下,TaskScheduler是一个抽象基类,这里绑定的应该是BasicTaskScheduler对象,回忆一下BasicTaskScheduler的创建是通过静态方法createNew获得的。

UsageEnvironment的构造和析构都受到protected权限的保护。

UsageEnvironment::UsageEnvironment(TaskScheduler& scheduler): liveMediaPriv(NULL), groupsockPriv(NULL), fScheduler(scheduler) {
}UsageEnvironment::~UsageEnvironment() {
}

reclaim方法(自我回收)

自我回收是一个public接口,可以在外部使用。但是其必须是在(liveMediaPriv NULL && groupsockPriv NULL)成立的条件下才会析构自身。

void UsageEnvironment::reclaim() {// We delete ourselves only if we have no remainining state://我们回收自己,仅当我们有一个删除遗留的状态:if (liveMediaPriv == NULL && groupsockPriv == NULL) delete this;
}

internalError方法(内部错误)

这个就不用解释了,在TaskScheduler中有一个一样的。

// By default, we handle 'should not occur'-type library errors by calling abort().  Subclasses can redefine this, if desired.
void UsageEnvironment::internalError() {abort();
}

24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment相关推荐

  1. 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  2. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

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

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  4. 16 BasicHashTable基本哈希表类(三)——Live555源码阅读(一)基本组件类

    这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...

  5. Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构

    目录 一.Live555介绍 1.Live555项目介绍 2.官网及帮助文档介绍 二.源码目录结构 1.UsageEnvironment 2.BasicUsageEnvironment 3.group ...

  6. 39 网络相关函数(七)——live555源码阅读(四)网络

    39 网络相关函数(七)--live555源码阅读(四)网络 39 网络相关函数(七)--live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...

  7. Live555源码阅读笔记(四):groupsock 目录详解

    一.groupsock 目录介绍 groupsock 目录总共有16个源码文件,编译后生成 libgroupsock.a,这个库中的类封装了网络接口和套接字,特别是"Groupsock&qu ...

  8. .NET MYSQL数据库操作基类( C#源码)

    使用MySql.Data.dll,它.Net访问MySQL数据库的一个驱动 下载 DbHelperMySql.CS using System; using System.Collections; us ...

  9. mysql 操作类 C .net_.NET MYSQL数据库操作基类( C#源码)

    使用MySql.Data.dll,它.Net访问MySQL数据库的一个驱动 下载 DbHelperMySql.CS using System; using System.Collections; us ...

最新文章

  1. [小巩u3d] u3d基础知识
  2. android api 相机,具有相机2 API的Android Lollipop上的ZSL功能
  3. DSP 的双缓冲串口程序设计
  4. header+php+xiazai_php通过header方法实现文件下载
  5. MapReduce之InputFormat理解
  6. [Android]ListView的Adapter.getView()方法中延迟加载图片的优化
  7. Possible missing firmware
  8. 法兰克焊接机器人编程入门_焊接机器人编程入门基本常识
  9. 笔记 神经网络、BP算法推导
  10. 锁定计算机和睡眠有什么区别,电脑系统待机、睡眠和休眠的区别有哪些
  11. 平行时代的平行智能体系(王飞跃)
  12. 小学生计算机按键分布图,小学生计算器上各种按键的作用
  13. 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
  14. 怎么修改视频文件的修改时间?
  15. 盘点中国未来最具潜力的IT培训学校前5名
  16. 【语音智能平台】京东Alpha VS 讯飞开放平台 (一)
  17. Qt Widgets
  18. 名悦集团介绍新手入门级保养基本常识,不可忽视这几点
  19. 服务器开发- 牌和牌的基本操作
  20. Oracle EBS 企业税改方案(三)-未结采购单据及部分AP Invoices税率调整

热门文章

  1. Java 内存泄漏监控检测与分析
  2. dell服务器状态监控系统,Nagios监控Dell服务器硬件状态
  3. linux如何添加默认路由表_Linux-如何添加路由表
  4. windows进程生产者消费者代码c语言,生产者消费者问题---C语言实现
  5. python输入函数后无法运行_python - 如何在函数运行期间忽略所有用户输入?_python_酷徒编程知识库...
  6. linux安装mysql5.7自己初始化_linux系统安装mysql5.7步骤
  7. 将毫秒转换_Matlab将Unix时间戳转为可读日期
  8. DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...
  9. c语言程序设计入门导论,程序设计入门——C语言
  10. 删除时存在依赖_从一次线上故障来看redis删除机制