【问题标题】:Real Time priority in .Net.Net 中的实时优先级
【发布时间】:2012-02-28 20:41:28
【问题描述】:

我有一个通过 D2XX 接口将音频数据馈送到 FTDI 设备的应用程序。当我的应用程序有焦点时,它可以完美运行,并且使用很少的 CPU (5%)。但是当我敲击 CPU(通过切换到其他应用程序或大量绘图)时,有时我会在音频中产生口吃。

我尝试了很多方法来防止这种情况(实时进程/线程优先级、MMCSS 调度等),但有时仍会发生。

是否还有其他方法可以提高优先级,或者如果不编写内核驱动程序就不可能?

【问题讨论】:

  • USB 外围设备有多少缓冲?
  • 没有办法。您可以在内核中创建高优先级项目,但由于不是实时内核,即使这也不能 100% 保证。

标签: .net usb real-time scheduler thread-priority


【解决方案1】:

如果您将进程(而非线程)优先级设置为“实时”,则其线程应始终在来自其他非实时进程的线程之前运行。所以我认为这是你能做的最好的。

但您应该仅在绝对必要时使用实时进程优先级,因为它会导致整个系统变得无响应。

【讨论】:

    【解决方案2】:

    提高为设备提供服务的线程的优先级,或增加(如果可能的话)与设备通信的缓冲区大小。

    windows内任务切换的最短时间为10ms。如果您的线程没有按时处理来自设备的数据,您就会出现卡顿和音频中断。

    【讨论】:

      【解决方案3】:

      您可能需要考虑使用 .net 4.0 的并行编程可能性。当你创建一个任务工厂,让工作由多个并行线程完成时,分配的 cpu % 会更高。

      【讨论】:

      • 我认为问题不在于吞吐量,而在于延迟。而且您的解决方案无助于延迟。
      猜你喜欢
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2016-09-23
      • 1970-01-01
      • 2011-04-30
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多