【发布时间】:2015-07-06 13:13:49
【问题描述】:
我目前正在使用GetThreadTimes 告诉我我在应用程序的事件循环中花费了多少时间。
我想知道冬眠会如何影响它。是否报告了休眠时间?或者也许作为系统时间?所有版本的 Windows 上的行为是否相同?
注意我对 Posix here 提出了同样的问题。
【问题讨论】:
我目前正在使用GetThreadTimes 告诉我我在应用程序的事件循环中花费了多少时间。
我想知道冬眠会如何影响它。是否报告了休眠时间?或者也许作为系统时间?所有版本的 Windows 上的行为是否相同?
注意我对 Posix here 提出了同样的问题。
【问题讨论】:
怎么可能?
休眠时,计算机实际上是关闭,没有计时器在计时,也没有进行计数。
您在GetThreadTimes 中看到的计时是在系统计时器1的每个滴答声(即中断)处计算的。
我编写了一个小 C 程序来测试它。
它每 1000 毫秒记录一次计时,我运行它并让我的笔记本电脑休眠(大约在 9 秒左右)。
计数中没有显示间隙,正如预期的那样,每行大约 1000 毫秒上一个。
因此休眠时间既不计入系统时间也不计入用户时间。
我不知道这是否与所有旧版本的 Windows 一致,尤其是具有不同休眠含义的版本,但您可以期望这在所有重要版本中保持一致。
1HPET、LAPIC 计时器或旧的好 PIT,无论是否可用
【讨论】:
GetThreadTimes 从哪里获取数据?处理计数器/计时器或其他地方? » 但是,由于 MSDN 不包含关于该主题的任何单词,据我所知,您是如何找到该信息的?
Sleep 的测试程序。您将始终读取 0 作为用户和系统时间。为了制作这个测试程序,我不得不使用一个低效的自旋循环——这足以理解线程计时是如何计算的。