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