调用的GetProcessTimes定期返回相同的结果

GetProcessTimes called periodically returns the same results

本文关键字:结果 返回 GetProcessTimes 调用      更新时间:2023-10-16

我在循环中周期性地调用GetProcessTimes(),它在每次迭代中都会做同样的事情,但它似乎每次都会生成相同的结果,而且只是会随时间变化。这是正常行为吗?结果不应该随着时间的推移而有所改变吗?

void ImCalledPeriodically() {
    static const DWORD  dwPid = ::GetCurrentProcessId();
    static const HANDLE hProc = ::OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, dwPid );
    static FILETIME ftUnused1, ftUnused2; // Unused, mandatory parameters.
    ULARGE_INTEGER uliUsr, uliKrn;
    ::GetProcessTimes( hProc, & ftUnused1, & ftUnused2, (_FILETIME *)& uliKrn, (_FILETIME *)& uliUsr);
    printf("usr=%I64d krn=%I64d", uliUsr.QuadPart, uliKrn.QuadPart );
    // etc...
}

输出值只随时间变化,例如:

641002中,641002中,641002中,641002然后1092007,1092007,1092007,1092007等等。

不是每次都要换几个吗?函数内部是否有某种刷新率?

谢谢你的帮助。

您可能注意到,这些值大约每16毫秒才变化一次,这是Windows用于计时器和线程时间量的默认时间间隔。因此,如果你在一个相对紧凑的循环中进行调用,你会得到重复的值。

除此之外,时间显示了实际的CPU消耗。如果您的进程在两次调用之间几乎没有工作,则时间不会增加。

相关文章: