我在一个循环中定期调用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 等...
每次都不应该改变一些吗?函数内部是否有某种刷新率?
感谢您的帮助。
答案 0 :(得分:3)
您可能注意到值只是每16毫秒更改一次,这是Windows用于其计时器的默认时间间隔和线程时间量。因此,如果您以相对紧凑的循环进行调用,则会获得重复值。
最重要的是时间显示实际的CPU消耗。如果你的过程在两次通话之间几乎没有工作,那么时间就不会增加。