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

时间:2013-08-07 15:48:44

标签: c++ c windows process cpu

我在一个循环中定期调用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 等...

每次都不应该改变一些吗?函数内部是否有某种刷新率?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

最重要的是时间显示实际的CPU消耗。如果你的过程在两次通话之间几乎没有工作,那么时间就不会增加。