我有两个系统调用GetSystemTime()和GetThreadTimes(),我需要一个给定的Win32线程来计算CPU利用率。
为了精确起见,我需要确保两个GetSystemTime()和GetThreadTimes()的自动执行; 即,存在应在呼叫之间没有上下文切换到GetSystemTime()&GetThreadTimes()。
其原因是,偶尔我结束了超过100%(〜500 1)的百分比。
我如何能保证2所函数调用的原子执行?
谢谢你,萨钦
我有两个系统调用GetSystemTime()和GetThreadTimes(),我需要一个给定的Win32线程来计算CPU利用率。
为了精确起见,我需要确保两个GetSystemTime()和GetThreadTimes()的自动执行; 即,存在应在呼叫之间没有上下文切换到GetSystemTime()&GetThreadTimes()。
其原因是,偶尔我结束了超过100%(〜500 1)的百分比。
我如何能保证2所函数调用的原子执行?
谢谢你,萨钦
你最好的赌注将被分配的计算线程实时优先级。 实时线程只能通过其他实时线程(或者提升到实时优先级)获得抢占。
我不太确定就可以了。 除非你知道什么是基本操作都在各自的功能,因为它们正好是Windows API调用......好运气。
这岂不是可能只是调整了100百分比?
perc = ( perc > 100.0f ) ? 100.0f : perc;
可悲的是没有办法。 在Win32的两个系统调用之间是没有办法阻止你的进程/线程被背景切换出去。 否则,这将是微不足道的人来实现,通过拒绝每一个锁定系统得到转出的过程。
将调用以相反的顺序帮助功能? (99%优于101%...)
此外,如果你只是在做这个之前强制上下文切换(通过调用sleep例如()),你可能会减少越来越切换出的机会。 我不知道如何将工作,虽然。