Winapi Win32:代码块的原子执行

Winapi Win32:代码块的原子执行,winapi,atomic,context-switch,Winapi,Atomic,Context Switch,我有两个系统调用GetSystemTime()和GetThreadTimes(),需要它们来计算给定Win32线程的CPU利用率 为了准确起见,我需要确保GetSystemTime()和GetThreadTimes()都是原子执行的;i、 e.调用GetSystemTime()和GetThreadTimes()之间不应存在上下文切换 原因是,有时我最终会得到超过100%的百分比(约1/500) 如何确保2个函数调用的原子执行 谢谢, 萨钦我不确定你能不能。除非您知道每个函数中的底层操作是什么,而

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

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

原因是,有时我最终会得到超过100%的百分比(约1/500)

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

谢谢,
萨钦

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

不可能只调整100%以上的百分比吗

perc = ( perc > 100.0f ) ? 100.0f : perc;

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

不可能只调整100%以上的百分比吗

perc = ( perc > 100.0f ) ? 100.0f : perc;

遗憾的是,没有办法。在Win32中的两次系统调用之间,无法防止进程/线程被上下文切换。否则,对于某人来说,实现一个通过拒绝关闭所有服务器来锁定系统的进程是微不足道的

遗憾的是,没有办法。在Win32中的两次系统调用之间,无法防止进程/线程被上下文切换。否则,对于某人来说,实现一个通过拒绝关闭所有服务器来锁定系统的进程是微不足道的

以相反顺序调用函数会有帮助吗?(99%优于101%…)


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

以相反顺序调用函数会有帮助吗?(99%优于101%…)


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

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

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

是否无法直接查询线程CPU利用率的窗口?是否无法直接查询线程CPU利用率的窗口?这仍然是可中断的。这仍然是可中断的。