Приоритет в реальном времени в .Net - PullRequest
1 голос
/ 29 февраля 2012

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

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

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

Ответы [ 3 ]

0 голосов
/ 29 февраля 2012

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

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

0 голосов
/ 29 февраля 2012

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

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

0 голосов
/ 29 февраля 2012

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

...