2

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 等...

不应该每次都换几个吗?该功能内部是否有某种刷新率?

谢谢你的帮助。

4

1 回答 1

3

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

最重要的是,时间显示了实际的 CPU 消耗。如果您的进程在两次调用之间几乎没有工作或根本没有工作,则时间不会增加。

于 2013-08-07T15:52:35.457 回答