
CPU throttling in C++我只是想知道是否有一种优雅的方法来为执行密集计算的特定线程设置最大CPU负载。 现在,我在线程中找到了最耗时的循环(它仅压缩),并使用带有硬编码值的 我不知道有任何API可以使操作系统的调度程序执行您想要的操作(即使您的线程是空闲优先级的,如果没有更高优先级的就绪线程,您的线程也会运行)。但是,我认为您可以根据已经在做的事情即兴发挥一个相当优雅的调节功能。本质上(我没有Windows开发机): 选择线程在每次迭代中休眠的默认时间。然后,在每次迭代中(或在每第n次迭代中,使节流功能本身不会成为很大的CPU负载), 根据看门狗计算CPU使用率的方式,您可能希望使用GetProcessAffinityMask()来找出系统有多少个CPU。 dCPU /(dClock * CPUs)是可用的总CPU时间的百分比。 您仍然必须为初始睡眠时间和增量/减量选择一些不可思议的数字,但是我认为可以对该算法进行调整,以使线程在相当接近确定的CPU百分比的情况下运行。 在Linux上,您可以使用nice()更改线程的调度优先级。 问题是在工作时想让CPU空闲是不正常的。通常,您将后台任务设置为" IDLE"优先级,然后让操作系统处理所有交互式任务未使用的CPU时间的调度。 在我看来,问题在于看门狗进程。 如果您的后台任务是CPU密集型的,那么您希望它占用其任务所有未使用的CPU时间。 也许您应该考虑修复看门狗程序? 我无法想到您想要的任何跨平台方式(或任何保证方式的句号),但是当您使用GetTickCount时,您可能对跨平台不感兴趣:) 我将使用进程间通信并为密集的流程设置良好的级别,以获取所需的信息,但是我不确定这是否适合您的情况。
编辑:
您可能可以更改线程的优先级,但是更改最大利用率可能需要轮询和黑客来限制发生的事情数量,或者使用可以设置进程最大利用率的OS工具。 |