BasicUsageEnvironment 继承自 BasicUsageEnvironment0,主要增加的功能,使用静态函数 createNew 来创建自己;重载“<<”操作符,用来向标准错误输出(stderr)打印信息。
新增的接口
createNew :静态函数,用来创建 BasicUsageEnvironment
重载UsageEnvironment 的接口
getErrno :返回错误码 errno
operator<< : 重载“<<”操作符函数,参数可以是char const*、int、unsigned、double、void*
使用例子
envir() << "...local connection opened\n"; // envir() 返回当前的环境 UsageEnvironment& fEnviron;
BasicUsageEnvironment0 继承自 UsageEnvironment,主要维护一个保存 处理结果信息 的缓冲区 char fResultMsgBuffer[RESULT_MSG_BUFFER_MAX]
重载UsageEnvironment 的接口
getResultMsg :返回 char fResultMsgBuffer[RESULT_MSG_BUFFER_MAX]
setResultMsg :将信息保存到 fResultMsgBuffer 中
setResultErrMsg :相比setResultMsg,将 strerror(err) 添加到信息缓冲区中
appendToResultMsg :向信息缓冲区中追加信息
reportBackgroundError :把信息打印到标准错误stderr中:fputs(getResultMsg(), stderr)
使用例子
envir().setResultMsg("URL is too long");
UsageEnvironment 纯虚类,代表使用环境
实现的接口:
reclaim :尝试回收资源,delete this之前会做判断,如果还不能删除,返回false
taskScheduler :返回任务调度
虚函数
internalError :当发生内部错误时,调用;实际调用的是 abort() 来中止程序,可以根据情况重载它。
必须重载的纯虚函数,就是上面两个类重载的接口,主要是输出流重定向<< 和 维护 处理结构信息
MsgString:在 UsageEnvironment 中定义: typedef char const* MsgString;
BasicTaskScheduler 继承自 BasicTaskScheduler0,用select来调度任务
新增的接口
构造函数 :使用 FD_ZERO 来清空读、写、异常的 fd_set
createNew :静态函数,用来创建 BasicTaskScheduler
schedulerTickTask : 设置延迟任务
重载 BasicTaskScheduler0 的接口
SingleStep :单步执行,内部使用 select 处理读写事件,然后处理触发事件 fTriggeredEventHandlers,
最后处理任何可能已经到期的延迟事件 fDelayQueue。
重载 TaskScheduler 的接口
setBackgroundHandling :设置socket句柄
moveSocketHandling :替换socket句柄
BasicTaskScheduler0 继承自 TaskScheduler
新增纯虚函数
SingleStep
重载 TaskScheduler 的接口
scheduleDelayedTask :向延时任务队列 fDelayQueue 中添加任务 AlarmHandler
unscheduleDelayedTask :从延时任务队列 fDelayQueue 中删除任务
createEventTrigger :创建触发事件
deleteEventTrigger :删除触发事件
triggerEvent :触发事件,这里将事件设置为可触发标志,在 SingleStep 中才会真正执行触发的事件任务
doEventLoop :重复循环,处理可读套接字和定时事件
TaskScheduler 纯虚类
纯虚函数:管理socket监听如select、延迟任务、事件触发
// 管理socket监听如select
setBackgroundHandling
moveSocketHandling
// 管理延迟任务(定时任务)
scheduleDelayedTask
unscheduleDelayedTask
// 管理触发事件
createEventTrigger
deleteEventTrigger
triggerEvent
// 所有的任务都在事件循环中执行
doEventLoop
虚函数
rescheduleDelayedTask :等于先 unscheduleDelayedTask 然后再 scheduleDelayedTask
internalError :默认是,当发生内部错误时,终止程序 abort()
普通函数
disableBackgroundHandling :禁止事件循环,
内部直接调用 setBackgroundHandling(socketNum, 0, NULL, NULL);