UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存UsageEnvironment的指针。
UsageEnvironment包含下面几个文件:
一.字符串拷贝函数: strDup.h / strDup.cpp
strDup.h 解释:
char* strDup(char const* str); // Note: strDup(NULL) returns NULL //如果源字符串为空,则返回空 char* strDupSize(char const* str); // Like "strDup()", except that it *doesn't* copy the original. // (Instead, it just allocates a string of the same size as the original.) //返回一个字符串,但是它不拷贝源字符串str的内容,它仅拷贝一个与源字符串长度相同的空字符串
strDup.cpp 解释:
#include "strDup.hh" #include "string.h" char* strDup(char const* str) { if (str == NULL) return NULL; //判断源函数是否为空 size_t len = strlen(str) + 1; //计算源字符串的长度,这里注意strlen所得大小不包含'\0',所以这里要加一。 char* copy = new char[len]; //生成新字符串 if (copy != NULL) { memcpy(copy, str, len); //拷贝源字符串的内容 } return copy; } char* strDupSize(char const* str) { if (str == NULL) return NULL; size_t len = strlen(str) + 1; char* copy = new char[len]; //与strDup类似,只是这里不拷贝源字符串的内容,直接返回new出来的新字符串。 return copy; }
二.Boolean.hh 布尔类型的一些宏定义定义
三.HashTable.hh / HashTable.cpp 哈希表
根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
在这里只是声明了一个基类,具体使用的子类在BasicUsageEnvironment里定义。
四.UsageEnvironment.hh / UsageEnvironment.cpp
声明了两个基类:UsageEnvironment 和 TaskScheduler,具体使用的子类在BasicUsageEnvironment里定义。
UsageEnvironment :系统运行环境,保存全局仅有的TaskScheduler,Live555的所有类都保存了UsageEnvironment的指针,因此每个类可以方便地将自己的任务加入调度中。负责消息的输入输出和用户的交互功能。
TaskScheduler: 任务调度类,整个程序的运行发动机就是它,它负责调度任务,执行任务。实现事件的异步处理和事件处理函数的注册,它通过维护一个异步读取源实现对诸如通信消息到达等事件的处理,通过使用DelayQueue实现对其他注册函数的延时调度。
// By default, we handle 'should not occur'-type library errors by calling abort(). Subclasses can redefine this, if desired. void UsageEnvironment::internalError() { abort(); } void TaskScheduler::internalError() { abort(); } //当出现内部错误时,调用abort函数退出进程,子类也可以重写该函数。