我在循环中定期调用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消耗。如果您的进程在两次调用之间很少或没有任何工作,则时间不会增加。

10-02 07:19