代码随想录的项目
LogStream.h
// 返回data_ char数组的数据末尾地址
const char* end() const { return data_ + sizeof data_; }
Logging.cpp
//定义一个 struct timeval 类型的变量 tv,用于存储当前的时间信息。
//定义一个 time_t 类型的变量 time,用于存储当前的时间戳。
//定义一个字符数组 str_t,用于存储格式化后的时间字符串。
//调用 gettimeofday 函数,获取当前的时间信息,并将其存储在 tv 变量中。
//将 tv 变量中的时间戳赋值给 time 变量。
//调用 localtime 函数,将 time 变量转换为本地时间,并将结果存储在 p_time 变量中。
//调用 strftime 函数,将 p_time 变量中的本地时间格式化为一个字符串,并将其存储在 str_t 数组中。
//将格式化后的时间字符串添加到日志信息中,并将其存储在 stream_ 变量中。
void Logger::Impl::formatTime()
{
struct timeval tv;
time_t time;
char str_t[26] = {0};
gettimeofday (&tv, NULL);
time = tv.tv_sec;
struct tm* p_time = localtime(&time);
strftime(str_t, 26, "%Y-%m-%d %H:%M:%S\n", p_time);
stream_ << str_t;
}
FileUtil.cpp
//stream:一个指向 FILE 类型的指针,表示要设置缓冲区的文件流。
//buf:一个指向字符数组的指针,表示用户提供的缓冲区。
//size:一个 size_t 类型的变量,表示缓冲区的大小。
//当你调用 setbuffer 函数时,文件流将使用用户提供的缓冲区进行 I/O 操作。这样,在进行文件读写时
//数据首先被存储在缓冲区,然后再从缓冲区写入文件或从文件读取到缓冲区。这种方式可以减少实时读写操作的开销,提高性能。
AppendFile::AppendFile(string filename) : fp_(fopen(filename.c_str(), "ae")) {
// 用户提供缓冲区
setbuffer(fp_, buffer_, sizeof buffer_);
}
HttpData.cpp
mime这个map在h和cpp中都声明了,感觉cpp中的声明是没有必要的?
std::unordered_map<std::string, std::string> MimeType::mime; // 16行
Timer这个文件包含两个类
TimerNode类主要维护一个http请求和超时时间,以及是否删除等等。
TimerManager类包含一个优先级队列,用来存放TimerNode对象
// 表示队列存放的数据类型是SPTimerNode,std::deque<SPTimerNode>表示队列的实现容器是deque,TimerCmp代表比较器
std::priority_queue<SPTimerNode, std::deque<SPTimerNode>, TimerCmp> timerNodeQueue;
void TimerNode::update(int timeout) 更新超时时间
// 这个函数的注释有点看不懂,我感觉就是被删除或者无效了,直接从堆里面删了啊
void TimerManager::handleExpiredEvent() {
// MutexLockGuard locker(lock);
while (!timerNodeQueue.empty()) {
SPTimerNode ptimer_now = timerNodeQueue.top();
if (ptimer_now->isDeleted())
timerNodeQueue.pop();
else if (ptimer_now->isValid() == false)
timerNodeQueue.pop();
else
break;
}
}