24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
2015-06-30 08:56
351 查看
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*类型的指针
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(); }
相关文章推荐
- AngularJS配置xsrftoken(django防止跨站)以及防止与django模板冲突的配置
- cookie设置
- CMD命令大全
- 部署视频聊天系统:网络品质测试
- 23 使用环境 UsageEnvironment——Live555源码阅读
- android edittext+listview进阶 实现搜索listview中的内容 定制自己的过滤器
- Centos6.5关闭防火墙命令
- python面向对象 格式很重要
- 如何只授予用户查看存储过程定义的权限
- OA系统权限管理设计方案
- 基于OSGi的企业级快速开发平台(开源)
- 使用EventHandler传递参数
- iOS完整学习路线图
- jstree自定义contextmenu
- onNewIntent调用时机
- 微信分享
- 朝鲜历史
- nginx+php-fpm模式php内存泄漏探究
- 查所有表的记录数,保留空间,使用空间,索引使用空间,未用空间
- 深入理解Spring AOP之二代理对象生成