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