我陷入了一个情况,需要生成一定频率的赫兹。我尝试过多媒体计时器和互联网上所有其他可用的东西,但到目前为止,带有一些if-else条件的无限循环给我带来了最好的结果。但这种方法的问题是它几乎消耗了所有的CPU资源,没有留下足够的空间让其他应用程序正常工作。
我需要一个算法,可以生成某些赫兹到千赫兹的频率。
我正在使用C#的Windows平台。
我陷入了一个情况,需要生成一定频率的赫兹。我尝试过多媒体计时器和互联网上所有其他可用的东西,但到目前为止,带有一些if-else条件的无限循环给我带来了最好的结果。但这种方法的问题是它几乎消耗了所有的CPU资源,没有留下足够的空间让其他应用程序正常工作。
我需要一个算法,可以生成某些赫兹到千赫兹的频率。
我正在使用C#的Windows平台。
在非实时平台上,无法准确生成固定频率的信号。在任何时刻,来自同一进程或其他进程的高优先级线程都可能阻止您的线程执行。例如,当GC线程启动时,工作线程将被挂起。
话虽如此,您允许具有多少抖动,并且需要支持的最高频率是多少?
由于您正在生成计时器,因此您希望根据频率的周期进行休眠。
您将不得不在其自己的线程中运行频率生成器并调用
Thread.Sleep(yourFrequencyPeriodMs);
在每个周期的迭代中。
在循环中使用Thread.Sleep(delay);
它可以减少处理器的使用率
Thread.Sleep
可能无法获得足够高的分辨率。当调用 Sleep
时,它只规定了最小的睡眠时间,在繁忙的系统上,Thread.Sleep(1)
可能会睡眠更长的时间(这可能比指定的 Khz 时间还要长)。 - Matthew