在Windows上,GetProcessTimes()和QueryProcessCycleTime()可用于获取应用程序的所有线程的总计。我期望(显然天真地)找到总循环数和总处理器时间(用户+内核)之间的比例关系。转换为相同单位(秒)并以应用程序运行时间的百分比表示时,它们甚至不会关闭;它们之间的比例差异很大。
应用程序启动后,它们相当接近。
3.6353% CPU cycles
5.2000% CPU time
0.79 Ratio
但是这个比例随着应用程序保持闲置而增加(低于11小时后,大部分是空闲的)。
0.0474% CPU cycles
0.0039% CPU time
12.16 Ratio
显然,计算的周期不会对用户或内核时间有所贡献。我很好奇它是如何运作的。请赐教。
感谢。
答案 0 :(得分:0)
GetProcessTimes和QueryProcessCycleTime值以不同方式计算。 GetProcesTimes / GetThreadTimes更新以响应计时器中断,而QueryProcessCycleTime值基于实际线程执行时间的跟踪。当使用和比较两种API结果时,这些不同的测量方法可能导致非常不同的时序结果。特别是因为GetThreadTimes仅包含其线程计数器的完全完成的时隙值(参见http://blog.kalmbachnet.de/?postid=28),这通常会导致不正确的时序。
由于GetProcessTimes通常报告的时间少于实际花费的时间(由于并非总是完成其时间片),因此它是有意义的 与循环测量百分比相比,其CPU时间百分比将随着时间的推移而降低。