异步情况的日志打印

/*************************************
 * 异步情况的日志打印
 * 以记录“加”、“减”的开始、结束时间戳为例,只展示思路,不用纠结方法内容。
**************************************/
#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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章