【问题标题】:How does GetThreadTimes report time spent hibernating?GetThreadTimes 如何报告休眠时间?
【发布时间】:2015-07-06 13:13:49
【问题描述】:

我目前正在使用GetThreadTimes 告诉我我在应用程序的事件循环中花费了多少时间。

我想知道冬眠会如何影响它。是否报告了休眠时间?或者也许作为系统时间?所有版本的 Windows 上的行为是否相同?

注意我对 Posix here 提出了同样的问题。

【问题讨论】:

    标签: c windows winapi


    【解决方案1】:

    不,不报告休眠时间

    怎么可能?

    休眠时,计算机实际上是关闭,没有计时器在计时,也没有进行计数。
    您在GetThreadTimes 中看到的计时是在系统计时器1的每个滴答声(即中断)处计算的。

    我编写了一个小 C 程序来测试它。
    它每 1000 毫秒记录一次计时,我运行它并让我的笔记本电脑休眠(大约在 9 秒左右)。
    计数中没有显示间隙,正如预期的那样,每行大约 1000 毫秒上一个。

    因此休眠时间既不计入系统时间也不计入用户时间。

    我不知道这是否与所有旧版本的 Windows 一致,尤其是具有不同休眠含义的版本,但您可以期望这在所有重要版本中保持一致。

    1HPET、LAPIC 计时器或旧的好 PIT,无论是否可用

    【讨论】:

    • 嗯,这个问题确实相当于:«GetThreadTimes 从哪里获取数据?处理计数器/计时器或其他地方? » 但是,由于 MSDN 不包含关于该主题的任何单词,据我所知,您是如何找到该信息的?
    • @yoric 见here。或者只是制作一个循环并使用Sleep 的测试程序。您将始终读取 0 作为用户和系统时间。为了制作这个测试程序,我不得不使用一个低效的自旋循环——这足以理解线程计时是如何计算的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2010-09-24
    • 2011-08-24
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多