Приоритет в реальном времени в.Net
У меня есть приложение, которое передает аудиоданные на устройство FTDI через интерфейс D2XX. Он отлично работает, когда мое приложение сфокусировано, и использует очень мало ЦП (5%). Но когда я забиваю процессор (переключаясь на другие приложения или занимаясь тяжелой графикой), иногда я могу заикаться в звуке.
Я пытался сделать много вещей, чтобы предотвратить это (приоритеты процессов / потоков в реальном времени, планирование MMCSS и т. Д.), Но иногда это все же происходит.
Есть ли какой-либо другой способ повысить приоритеты или это невозможно без написания драйвера ядра?
3 ответа
Если вы установите для своего приоритета процесса (не потока) значение "Реальное время", его потоки должны всегда выполняться перед потоками из других процессов, которые не являются реальным временем. Поэтому я думаю, что это лучшее, что вы можете сделать.
Но вы должны использовать приоритет процесса в реальном времени только тогда, когда это абсолютно необходимо, потому что это может привести к тому, что вся система перестанет отвечать на запросы.
Увеличьте приоритет потока, который обслуживает устройство, или увеличьте (если это возможно) размер буфера для связи с устройством.
Минимальное время переключения задач внутри окон составляет 10 мс. Если ваш поток не обрабатывает данные с устройства вовремя, у вас будет заикание и пропадание звука.
Вы можете рассмотреть возможность использования возможностей параллельного программирования.net 4.0. Когда вы создаете фабрику задач и позволяете выполнять работу нескольким параллельным потокам, назначенный ЦП% будет выше.