使用50%cpu的简单C应用程序

我有一个使用常数50%的简单C应用程序。 我不知道为什么,但我想尽量减少它。

#include  #include  #include  void Wait(int seconds) { clock_t endwait; endwait = clock () + seconds * CLK_TCK ; while (clock() < endwait) {} } void main() { printf ("program running.\n"); /* Wait( 4 ); */ printf( "Done Waiting!\n" ); printwow(); /* exit(0); */ } timer_func (void) { Wait( 4 ); printwow(); } printwow() { printf ("Say hello"); timer_func(); } 

我想当然一定是计时器。 但我肯定不知道。

谢谢。

使用一些内置的hibernatefunction,它不使用处理器周期来“等待”,就像unistd.h sleep一样。

你的循环:

 while (clock() < endwait) {} 

正在忙着等待 。 您基本上与CPU进行了以下对话。

“我们到了吗?” “没有。”

“我们到了吗?” “没有。”

“我们到了吗?” “没有。”

(重复几次)

“我们到了吗?” “是。”

你最好使用像sleep()这样的函数告诉CPU什么时候准备就绪。

是的,这是Wait()紧密循环。 你可能有一台双核机器,所以你使用100%的一个核心。 请改用sleep()

timer_func()printwow()永远相互调用。 你最终会得到一个堆栈溢出。

因为循环

 while (clock() < endwait) {} 

cpu必须一直检查clock()的值,使用sleep()而不是你自己的代码。

如果你想让你的代码睡4秒钟,那么你可以使用sleep(4)来做到这一点,它几乎肯定不会像你的wait()函数那样消耗CPU。 请注意,sleep(4)将阻止执行单线程程序的其余部分,如果你不想这样,那么你将需要更复杂的东西,但我怀疑sleep(4)就足够了。

此外,您的代码最终会耗尽堆栈,因为printwow()调用timer_func()调用printwow(),它会在递归循环中无限地调用timer_func()等。 你需要解决这个问题,可能是使用for / while循环而不是递归。