我陷入了需要生成一些赫兹的定义频率的情况。我已经尝试过多媒体计时器和互联网上所有其他可用的东西,但到目前为止,带有一些 if-else 条件的无限循环给了我最好的结果。但是这种方法的问题是它几乎消耗了所有的cpu,没有空间让其他应用程序正常工作。
我需要一种算法,它可以生成一些 Hz 到 KHz 的频率。
我正在使用带有 C# 的 windows 平台。
我陷入了需要生成一些赫兹的定义频率的情况。我已经尝试过多媒体计时器和互联网上所有其他可用的东西,但到目前为止,带有一些 if-else 条件的无限循环给了我最好的结果。但是这种方法的问题是它几乎消耗了所有的cpu,没有空间让其他应用程序正常工作。
我需要一种算法,它可以生成一些 Hz 到 KHz 的频率。
我正在使用带有 C# 的 windows 平台。
您无法在非实时平台上准确生成固定频率的信号。在任何时候,来自同一进程或其他进程的高优先级线程都可能阻止线程的执行。例如,当 GC 线程启动时,工作线程将被挂起。
话虽如此,您允许的抖动是多少,您需要支持的最高频率是多少?
我解决问题的方法是生成“声波”并在声卡上输出。有多种方法可以从 C# 访问您的声卡,例如使用 XNA。正如其他人指出的那样,为此使用 CPU 并不是一个好方法。
Thread.Sleep(delay);
在你的循环中使用
它减少了处理器的使用
当您生成计时器时,您可能希望根据您的频率周期进行睡眠。
您必须在自己的线程中运行频率发生器并调用
Thread.Sleep(yourFrequencyPeriodMs);
在每个周期的迭代中。