【发布时间】:2013-08-09 02:18:59
【问题描述】:
我在一个循环中定期调用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 等等……
不应该每次都换几个吗?函数内部是否有某种刷新率?
感谢您的帮助。
【问题讨论】:
-
呃,为什么要将指向
ULARGE_INTEGER的指针传递给需要指向FILETIME结构的指针的函数? -
这是个好问题。这不是我自己的代码,它操纵我已经接近 x)
-
@CodyGray:这是因为他想使用
QuadPart成员,而FILETIME缺少该成员。 -
这并不正确。将函数传递给它想要的类型,然后将其转换为您想要的类型。这两种类型不一样。
-
ULARGE_INTEGER仅适用于 little-endian 平台。