博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
阅读量:5305 次
发布时间:2019-06-14

本文共 3470 字,大约阅读时间需要 11 分钟。

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

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

简介

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 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();}

转载于:https://www.cnblogs.com/oloroso/p/4609389.html

你可能感兴趣的文章
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>