我有两个系统调用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()),则可能会降低切换的可能性。我不知道那会有多好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top