【C++服务端技术】定时器
2023-09-14 09:06:30 时间
这个设计每调用一次就会重新注册,欢迎交流
#include <iostream>
#include <map>
#include <vector>
#include <time.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
struct tagTime
{
long long llStarTime;
int iCount;
int iSpace;
int iParam;
};
map<long long, vector<tagTime>> TimeList;
/*利用map如果key是整形,会自动从小到大排序,
我们可以把定时器先到期的key更小
由于相同时间到期的会重复,所以还得去重
那可以用二维结构,map<key,vector>,刚好vector是pushback有序的
*/
bool RegTimer(tagTime &Timer)
{
//cout<<Timer.llStarTime<<endl;
map<long long, vector<tagTime>>::iterator It = TimeList.find(Timer.llStarTime);
if(It == TimeList.end())
{
vector<tagTime> vTimelist;
vTimelist.push_back(Timer);
TimeList[Timer.llStarTime] = vTimelist;
}
else
{
It->second.push_back(Timer);
}
return true;
}
void UpdateTimer()
{
if(TimeList.size() <= 0)
return;
map<long long, vector<tagTime>>::iterator It = TimeList.begin();
if(time(NULL) < It->first)
{
//cout<<"000"<<time(NULL) <<" "<< It->first<<endl;
return;
}
vector<tagTime> *vTimeList = &(It->second);
if(vTimeList->size() <= 0)
{
//cout<<"111"<<endl;
return;
}
vector<tagTime>::iterator vIt = vTimeList->begin();
for(; vIt != vTimeList->end(); vIt++)
{
tagTime Timer = *vIt;
cout<<Timer.iCount<<" "<<Timer.iParam<<endl;
Timer.iCount--;
Timer.llStarTime = Timer.llStarTime + Timer.iSpace;
if(0 < Timer.iCount)
{
RegTimer(Timer);
}
}
vTimeList->clear();
TimeList.erase(It);
}
void main()
{
tagTime Timer;
Timer.iCount = 10;
Timer.iParam = 5201314;
Timer.iSpace = 1;
Timer.llStarTime = time(NULL);
RegTimer(Timer);
Timer.iParam = 141414;
Timer.iSpace = 2;
RegTimer(Timer);
while (true)
{
UpdateTimer();
Sleep(100);
}
system("pause");
}
相关文章
- 【C++年度盛会,全面开启】2022全球C++及系统软件技术大,豪华嘉宾阵容揭晓
- LeetCode455分发饼干c++贪心解法
- C++构造函数的作用_c++什么是构造函数
- c++中fstream是什么意思_汽车配置参数图文详解
- C++stl库_c++库
- C++基本概念_c语言 c++区别
- C u002F C++ 中的多维数组
- C++结构体和类的区别_c++有结构体吗
- c++的链表-C++链表
- c++的链表-链表入门(C++)
- C/C++ 目录递归与结束递归
- C/C++生态工具链——接口模拟工具gmock
- C++ 中文周刊 第103期
- C++命名空间
- C++面向对象程序设计(谭浩强)第三章第二~四节 学习笔记
- c++基础篇之C++ 模板
- C++ string支持配置器方法详解
- 安卓应用开发通过java调用c++jni的图文使用方法
- C++的try块与异常处理及调试技术实例解析