Win32的:代码块的原子执行(Win32: Atomic Execution of Code Bl

2019-09-28 18:06发布

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

为了精确起见,我需要确保两个GetSystemTime()和GetThreadTimes()的自动执行; 即,存在应在呼叫之间没有上下文切换到GetSystemTime()&GetThreadTimes()。

其原因是,偶尔我结束了超过100%(〜500 1)的百分比。

我如何能保证2所函数调用的原子执行?

谢谢你,萨钦

Answer 1:

你最好的赌注将被分配的计算线程实时优先级。 实时线程只能通过其他实时线程(或者提升到实时优先级)获得抢占。



Answer 2:

我不太确定就可以了。 除非你知道什么是基本操作都在各自的功能,因为它们正好是Windows API调用......好运气。

这岂不是可能只是调整了100百分比?

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


Answer 3:

可悲的是没有办法。 在Win32的两个系统调用之间是没有办法阻止你的进程/线程被背景切换出去。 否则,这将是微不足道的人来实现,通过拒绝每一个锁定系统得到转出的过程。



Answer 4:

将调用以相反的顺序帮助功能? (99%优于101%...)

此外,如果你只是在做这个之前强制上下文切换(通过调用sleep例如()),你可能会减少越来越切换出的机会。 我不知道如何将工作,虽然。



文章来源: Win32: Atomic Execution of Code Block