2012-02-28 2 views
1

У меня есть приложение, которое передает аудиоданные на устройство FTDI через интерфейс D2XX. Он отлично работает, когда мое приложение имеет фокус, и использует очень небольшой процессор (5%). Но когда я забиваю процессор (переключаясь на другие приложения или тяжелый рисунок), иногда я могу производить заикание в аудио.Приоритет реального времени в .Net

Я пробовал много вещей, чтобы предотвратить это (приоритеты процесса/потока в режиме реального времени, планирование MMCSS и т. Д.), Но это по-прежнему происходит иногда.

Есть ли другой способ, чтобы повысить приоритеты, или это невозможно без написания драйвера ядра?

+0

Сколько буферизации у вас есть на периферии USB? –

+0

Невозможно. Вы можете создавать высокоприоритетные элементы в ядре, но из-за того, что ядро ​​реального времени даже не гарантировано на 100%. – Christopher

ответ

-1

Возможно, вы захотите рассмотреть возможность параллельного программирования .net 4.0. Когда вы создаете фабрику задач и позволяете выполнять работу несколькими параллельными потоками, назначенный процессор будет выше.

+1

Я думаю, проблема заключается не в пропускной способности, а в латентности. И ваши соблазны не помогут латентности. – svick

0

Если вы установили приоритет процесса (не потока) на «Realtime», его потоки должны всегда выполняться перед потоками из других процессов, которые не являются Realtime. Поэтому я думаю, что это лучшее, что вы можете сделать.

Но вы должны использовать приоритет процесса Realtime только тогда, когда это абсолютно необходимо, потому что это может привести к тому, что вся система перестанет реагировать.

0

Повысить приоритет потока, обслуживающего устройство, или увеличить (если это возможно) размер буфера для связи с устройством.

Минимальное время переключения задач в окнах составляет 10 мс. Если ваш поток не будет обрабатывать данные с устройства вовремя, вы будете заикаться и падать в аудио.

Смежные вопросы