C GetThreadTimes如何报告休眠时间?
我目前正在使用C GetThreadTimes如何报告休眠时间?,c,windows,winapi,C,Windows,Winapi,我目前正在使用GetThreadTimes来告诉我在应用程序的事件循环中花费了多少时间 我想知道冬眠会如何影响这一点。是否报告了休眠时间?或者作为系统时间?所有版本的Windows上的行为是否相同 注意我对Posix问了同样的问题。不,休眠时间没有报告 怎么可能呢 当休眠时,计算机实际上已关闭,没有计时器在滴答作响,也没有计数。 使用GetThreadTimes看到的计时是在系统计时器1的每个刻度(即中断)处计算的 我制作了一个小的C程序来测试这一点。 它每1000毫秒记录一次计时,我运行它并休
GetThreadTimes
来告诉我在应用程序的事件循环中花费了多少时间
我想知道冬眠会如何影响这一点。是否报告了休眠时间?或者作为系统时间?所有版本的Windows上的行为是否相同
注意我对Posix问了同样的问题。不,休眠时间没有报告
怎么可能呢
当休眠时,计算机实际上已关闭,没有计时器在滴答作响,也没有计数。使用
GetThreadTimes
看到的计时是在系统计时器1的每个刻度(即中断)处计算的
我制作了一个小的C程序来测试这一点。它每1000毫秒记录一次计时,我运行它并休眠我的笔记本电脑(大约9秒)。
计数中未显示间隙,正如预期的那样,每条线距离前一条线约1000 ms 因此休眠时间既不计入系统时间,也不计入用户时间。 我不知道这与所有旧版本的Windows是一致的,特别是那些具有不同休眠含义的Windows,但是你可以期望它在所有重要的版本中都是一致的
1HPET、LAPIC计时器或旧good PIT,无论可用的是什么,这个问题实际上相当于:«
GetThreadTimes
从哪里获取数据?处理计数器/计时器还是其他地方?»但由于MSDN没有包含任何关于该主题的单词,据我所知,您是如何找到这些信息的?@yoric see。或者制作一个循环的测试程序,并使用Sleep
。您将始终读取0作为用户和系统时间。为了制作那个测试程序,我不得不使用一个低效的自旋循环——这足以理解线程计时是如何计算的。