24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
这是Live555源码阅读的第三部分,包括了UsageEnvironment相关的三个类。
本文由乌合之众 lym瞎编,欢迎转载 blog.cnblogs.net/oloroso
本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso
简介
UsageEnvironment是一个抽象基类,其定义在live555sourcecontrol\UsageEnvironment\include\UsageEnvironment.hh文件中。
UsageEnvironment定义了三个数据成员, void*类型的指针liveMediaPriv和groupsockPriv(要注意这两者是public权限的,在使用环境相关类中都没有对它们进行初始化以外的操作),这两个在后面说Groupsock和LiveMedia模块的时候就比较清楚了。还有一个很重要的是一个引用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 class
virtual ~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的更多相关文章
- 25 BasicUsageEnvironment0基本使用环境基类——Live555源码阅读(三)UsageEnvironment
25 BasicUsageEnvironment0基本使用环境基类——Live555源码阅读(三)UsageEnvironment 25 BasicUsageEnvironment0基本使用环境基类— ...
- 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类
这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...
- 26 BasicUsageEnvironment基本使用环境——Live555源码阅读(三)UsageEnvironment
26 BasicUsageEnvironment基本使用环境--Live555源码阅读(三)UsageEnvironment 26 BasicUsageEnvironment基本使用环境--Live5 ...
- 12 哈希表相关类——Live555源码阅读(一)基本组件类
12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...
- 13 HashTable抽象哈希表类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 10 DelayQueue 延时队列类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 www.cnblogs.com/oloroso/ 本文由乌合 ...
- 11 AlarmHandler定时处理类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 9 DelayQueueEntry 延时队列节点类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 8 延时队列相关类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
随机推荐
- Android学习笔记——MixLayout
该工程的功能是实现LinearLayout+TableLayout 以下代码是MainActivity.java中的代码 package com.example.mixlayout; import a ...
- 谁再说Matlab速度慢,我跟谁急
谁再说Matlab速度慢,我跟谁急 一.未进行内存预分配 y = 0; tic; for i=2:100000; y(i+1) = y(i)+ randn; end; toc 时间已过 0.03122 ...
- 一句SQL实现获取自增列操作
@@IDENTITY返回最后插入的标识值. 语法@@IDENTITY 返回类型numeric 注释在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语 ...
- [Unity] Unity3D研究院编辑器之独立Inspector属性
本文转自: http://www.xuanyusong.com/archives/3680雨松MOMO Unity提供了强大的Editor功能, 我们可以很轻易的在EditorGUI中绘制任意的属性. ...
- vi和vim区别及命令详解
vi和vim都是Linux中的编辑器,不同的是vim比较高级,可以视为vi的升级版本.vi使用于文本编辑,但是vim更适用于coding. 现将vim的命令行收集于下: vi有3个模式:插入模 ...
- mysql 导入sql文件,source命令
转自:http://blog.sina.com.cn/s/blog_610997850100mwv8.html 今天碰到个问题要用phpmyadmin导入1G的数据,但是在怎么都导入不了,用命令行就可 ...
- 2015年12月02日 GitHub入门学习(四)Git操作
序,学习使用Git是一项新技能,你将了解到Git与SubVersion的区别. 一.基本操作 git init 初始化仓库,请实际建立一个目录并初始化仓库,.git目录里存储着管理当前目录内容所需的仓 ...
- Sql导出数据报错-->SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服 ...
- 装X之读书籍
.读书又记不住...读过又有什么用...读万卷书 == 读0卷书 ? .额.读书不是记住的,毕竟哪里有这么多过目不忘的天才...要理解书中的内容...理解... .还是要记的,但是要理解的基础上记住. ...
- aperm方法
本文原创,转载请注明出处,本人Q1273314690(交流学习) 感觉很多地方提到了aperm,但都没讲清楚,我自己参考了大家的资料,做了下总结,希望能够让对大家有所帮助. aperm方法 Tran ...