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