无限循环占用100%的CPU(Infinite looping consumes 100% CPU)

2019-09-23 12:37发布

我被困在一个情况下,我需要生成一个定义了一些赫兹的频率。 我曾尝试多媒体计时器和所有其他的东西在互联网上公布,但到目前为止无限循环与一些的if-else条件给了我最好的结果。 但这种做法的问题是,它消耗几乎所有的CPU不留空间,用于其他应用程序的正常工作。

我需要一个算法要么产生一些赫兹至千赫兹的频率。

我使用Windows。平台与C#。

Answer 1:

不能准确地生成上一个非实时平台的固定频率的信号。 在任何时刻,来自相同或其他处理高优先级的线程可以阻止您的线程的执行。 例如,当GC线程踢,工作线程将被暂停。

话虽这么说,有什么你都不允许有抖动,什么是你需要支持的最高频率是多少?



Answer 2:

我会处理这个问题的方法是产生“声波”和输出的声卡。 有一些方法可以访问从C#,例如使用XNA声卡。 正如其他人所指出的那样,使用CPU因为这是不是一个好方法。



Answer 3:

使用Thread.Sleep(delay); 在循环

这是降低处理器使用率



Answer 4:

当您正在生成一个计时器,你会希望根据你的频率周期进入睡眠状态。

你将不得不在自己的线程和呼叫运行频率发生器

Thread.Sleep(yourFrequencyPeriodMs);

在周期的每一迭代。



文章来源: Infinite looping consumes 100% CPU