异步情况的日志打印
/************************************* * 异步情况的日志打印 * 以记录“加”、“减”的开始、结束时间戳为例,只展示思路,不用纠结方法内容。 **************************************/ #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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-05-07 libtorch配置vs2017