/*************************************
* 异步情况的日志打印
* 以记录“加”、“减”的开始、结束时间戳为例,只展示思路,不用纠结方法内容。
**************************************/
#include <iostream>
#include <Windows.h>
#define ADD 1
#define SUB 2
int logNum=0; //数组的下标,最多记录1000条日志
int action[1000]; //记录点:加、减
long long timeBegin[1000];
long long timeEnd[1000];
void OnLog(); //每5min打印一次
//初始化流程统计数组
memset(action, -1, 1000 * sizeof(int));
memset(timeBegin, -1, 1000 * sizeof(long long));
memset(timeEnd, -1, 1000 * sizeof(long long));
void add()
{
if (logNum<999) //防止下标越界
{
logNum++;
}
action[logNum]=ADD;
LARGE_INTEGER freq, begin, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&begin);
timeBegin[logNum]=begin.QuadPart;
std::this_thread::sleep_for(std::chrono::seconds(2)); //模拟耗时操作
QueryPerformanceCounter(&end);
timeEnd[logNum]=end.QuadPart;
}
void sub()
{
if (logNum<999) //防止下标越界
{
logNum++;
}
action[logNum]=SUB;
LARGE_INTEGER freq, begin, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&begin);
timeBegin[logNum]=begin.QuadPart;
std::this_thread::sleep_for(std::chrono::seconds(2)); //模拟耗时操作
QueryPerformanceCounter(&end);
timeEnd[logNum]=end.QuadPart;
}
void OnLog()
{
char cName[128];
for (int i = 0; i <logNum; i++)
{
switch (action[i])
{
case ADD:
sprintf_s(cName, "加法:开始时间戳 %lld,结束时间戳 %lld", timeBegin[i],timeEnd[i]);
break;
case SUB:
sprintf_s(cName, "减法:开始时间戳 %lld,结束时间戳 %lld", timeBegin[i],timeEnd[i]);
break;
default:
break;
}
}
logNum = 0;
}