在C中设置CPU使用率或操纵其他系统资源

时间:2015-01-09 16:01:45

标签: c resources cpu-usage

我在C中有特定的应用程序。是否有可能以编程方式设置进程的CPU使用率?我想将CPU使用率设置为例如。 20%通过特定(我的)过程几秒钟然后恢复正常使用。虽然(1)采取100%的CPU所以它不是我的想法。还有其他想法来操纵一些可以提供它的系统资源和功能吗?我已经进行了内存分配操作,但我需要有关操纵系统资源的其他想法。 谢谢!

2 个答案:

答案 0 :(得分:0)

我所知道的是,您可以根据操作系统控制应用程序的优先级。

此外,相当于Sleep()的函数可以减少CPU负载,因为它会导致应用程序将CPU周期放到其他正在运行的程序中。

答案 1 :(得分:0)

你有没有试过回答一个问题,一旦你深入研究它会变得越来越复杂?

你做什么取决于你想要完成什么。您是否希望通过特定(我的)流程使用" 20%几秒钟然后恢复正常使用"?或者您是否想要利用整个处理器的所有CPU使用率的20%?您希望在什么时间间隔内使用20%?平均超过5秒? 500毫秒? 10毫秒?

只要您不需要做任何实际工作并且想要在相当长的时间间隔(例如1秒)内获得20%的平均值,

20%的 过程非常简单。

for( i=0; i=INTERVAL_CNT; i++ )    //untested syntax error ridden code
{
  for( j=0; j=INTERVAL_CNT*(PERCENT/100); j++ )
  {
    //some work the compiler won't optimize away
  }
  sleep( INTERVAL_CNT*(1-(PERCENT/100)) );
}

调整此项以进行实际工作更加困难。请注意有关编译器执行优化的注释。优化编译器非常聪明,可以识别和删除无用的代码。例如,如果您使用myVar ++,将其声明为某个范围的本地,并且从不使用它,编译器将删除它以使您的应用程序运行得更快。

如果你想要一个更连续的负载(读取任何采样点的负载为20%,相对于具有一定占空比的方波),它将变得复杂。您可以通过启动CPU消耗多个线程进行一些实验来完成此操作。具有偏移占空比的多个线程应该可以为您提供更平滑的负载。

整个处理器的20%甚至更复杂,因为您需要考虑多个因素,例如处理器中的其他进程执行,进程优先级和多个CPU。我不打算详细介绍,但您可以通过同时执行具有偏移占空比的多个重量级过程以及主线程对处理器负载进行采样并通过以下方式动态调整重量级过程来实现此目的。共享变量集。

如果您希望我进一步混淆此事,请告诉我。

相关问题