无限循环消耗100%的CPU

时间:2012-10-04 14:05:15

标签: c# cpu-usage infinite-loop time-frequency

我陷入了需要生成某个Hz的定义频率的情况。我已经尝试过多媒体计时器和互联网上提供的所有其他东西,但到目前为止,一些if-else条件的无限循环给了我最好的结果。但是这种方法的问题在于它消耗了几乎所有的cpu,没有其他应用程序正常工作的空间。

我需要一种能够生成几Hz到KHz频率的算法。

我正在使用带有C#的Windows平台。

4 个答案:

答案 0 :(得分:3)

您无法在非实时平台上准确生成固定频率的信号。在任何时候,来自相同或其他进程的高优先级线程都可能阻止线程的执行。例如。当GC线程启动时,工作线程将被暂停。

话虽如此,您可以获得的抖动是多少,您需要支持的最高频率是多少?

答案 1 :(得分:2)

我接近问题的方法是在声卡上生成“声波”并输出。 有一些方法可以从C#访问您的声卡,例如使用XNA。 正如其他人所指出的那样,使用CPU并不是一个好方法。

答案 2 :(得分:0)

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

降低处理器使用率

答案 3 :(得分:0)

当您生成计时器时,您可能希望根据频率的周期进行睡眠。

您必须在自己的线程中运行频率发生器并调用

Thread.Sleep(yourFrequencyPeriodMs);

在每个时期的迭代中。