1

我有两个系统调用 GetSystemTime() 和 GetThreadTimes() 我需要计算给定 Win32 线程的 CPU 利用率。

为了准确起见,我需要确保 GetSystemTime() 和 GetThreadTimes() 都是原子执行的;即在调用GetSystemTime() 和GetThreadTimes() 之间不应有上下文切换。

原因是偶尔我会得到超过 100% 的百分比(约 500 分之一)。

如何确保 2 个函数调用的原子执行?

谢谢,萨钦

4

4 回答 4

2

我不太确定你能做到。除非您知道每个函数中的底层操作是什么,并且因为它们恰好是 Windows API 调用......祝你好运。

难道不能只调整超过 100 的百分比吗?

perc = ( perc > 100.0f ) ? 100.0f : perc;
于 2008-11-13T21:29:30.113 回答
2

您最好的选择是为计算线程分配实时优先级。实时线程只会被其他实时线程(或提升到实时优先级的线程)抢占。

于 2008-11-13T21:59:47.400 回答
1

可惜没有办法。在 Win32 中的两个系统调用之间,没有办法阻止您的进程/线程被上下文切换。否则,如果有人通过拒绝每次关机来实现锁定系统的进程,那将是微不足道的。

于 2008-11-13T21:30:22.840 回答
1

以相反的顺序调用函数会有所帮助吗?(99% 比 101% 好……)

此外,如果您在执行此操作之前强制进行上下文切换(例如通过调用 Sleep()),您可能会减少被切换出去的机会。我不知道这会有多好。

于 2008-11-13T21:45:14.073 回答