我有两个系统调用 GetSystemTime() 和 GetThreadTimes() 我需要计算给定 Win32 线程的 CPU 利用率。
为了准确起见,我需要确保 GetSystemTime() 和 GetThreadTimes() 都是原子执行的;即在调用GetSystemTime() 和GetThreadTimes() 之间不应有上下文切换。
原因是偶尔我会得到超过 100% 的百分比(约 500 分之一)。
如何确保 2 个函数调用的原子执行?
谢谢,萨钦
我有两个系统调用 GetSystemTime() 和 GetThreadTimes() 我需要计算给定 Win32 线程的 CPU 利用率。
为了准确起见,我需要确保 GetSystemTime() 和 GetThreadTimes() 都是原子执行的;即在调用GetSystemTime() 和GetThreadTimes() 之间不应有上下文切换。
原因是偶尔我会得到超过 100% 的百分比(约 500 分之一)。
如何确保 2 个函数调用的原子执行?
谢谢,萨钦
我不太确定你能做到。除非您知道每个函数中的底层操作是什么,并且因为它们恰好是 Windows API 调用......祝你好运。
难道不能只调整超过 100 的百分比吗?
perc = ( perc > 100.0f ) ? 100.0f : perc;
您最好的选择是为计算线程分配实时优先级。实时线程只会被其他实时线程(或提升到实时优先级的线程)抢占。
可惜没有办法。在 Win32 中的两个系统调用之间,没有办法阻止您的进程/线程被上下文切换。否则,如果有人通过拒绝每次关机来实现锁定系统的进程,那将是微不足道的。
以相反的顺序调用函数会有所帮助吗?(99% 比 101% 好……)
此外,如果您在执行此操作之前强制进行上下文切换(例如通过调用 Sleep()),您可能会减少被切换出去的机会。我不知道这会有多好。