1 Star 1 Fork 0

guanzhanyi/webServer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
timer.cpp 2.01 KB
一键复制 编辑 原始数据 按行查看 历史
guanzhanyi 提交于 2021-05-11 13:17 . 成功运行
/*
*/
#include<queue>
#include<deque>
#include<memory>
#include<sys/time.h>
#include<unistd.h>
#include"httpData.h"
#include"time.h"
TimerNode::TimerNode(std::shared_ptr<HttpData> request,int timeout):m_deleted(false),m_HttpData_ptr(request){
timeval now;
gettimeofday(&now,nullptr);
//?
m_expired=(((now.tv_sec%10000)*1000)+(now.tv_usec/1000))+timeout;
}
TimerNode::~TimerNode(){
if(m_HttpData_ptr){
m_HttpData_ptr->handleClose();
}
}
TimerNode::TimerNode(const TimerNode& t):m_expired(0),m_HttpData_ptr(t.m_HttpData_ptr){
}
void TimerNode::update(int timeout){
timeval now;
gettimeofday(&now,nullptr);
//毫秒的精确度
m_expired=(((now.tv_sec%10000)*1000)+(now.tv_usec/1000))+timeout;
}
void TimerNode::clearReq(){
m_HttpData_ptr.reset();
setDeleted();
}
void TimerNode::setDeleted(){
m_deleted=true;
}
//已经无了?
bool TimerNode::isDeleted(){
return m_deleted;
}
//判断是否过期了
bool TimerNode::isValid(){
timeval now;
gettimeofday(&now,nullptr);
size_t tmp=(((now.tv_sec % 10000) * 1000) + (now.tv_usec / 1000));;
if(tmp<m_expired){
return true;
}
else{
setDeleted();
return false;
}
}
uint32_t TimerNode::getexpired(){
return m_expired;
}
/* -------------------------------------------------------------------
----------------------------------------------------------------------*/
void TimerManager::add_timer(std::shared_ptr<HttpData> httpData, uint32_t timeout){
timer_node_ptr node(new TimerNode(httpData,timeout));
m_timer_queue.push(node);
//?
httpData->linkTimer(node);
}
//删除Timer
void TimerManager::del_timer(){
}
//处理超时事件
void TimerManager::handler_expired_event(){
while(!m_timer_queue.empty()){
timer_node_ptr tmp=m_timer_queue.top();
if(tmp->isDeleted()){
m_timer_queue.pop();
}
else if(tmp->isValid()==false){
m_timer_queue.pop();
}
else{
break;
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/guanzhanyi/web-server.git
git@gitee.com:guanzhanyi/web-server.git
guanzhanyi
web-server
webServer
master

搜索帮助