異步情況的日誌打印

/*************************************
 * 異步情況的日誌打印
 * 以記錄“加”、“減”的開始、結束時間戳爲例,只展示思路,不用糾結方法內容。
**************************************/
#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;
}

 

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