Я напишу интерфейс на C ++, который управляет большим станком с ЧПУ, и он будет работать в Windows. Из соображений безопасности я хотел бы, чтобы этот процесс выполнялся на собственном ядре, чтобы он мог запускать процесс в режиме реального времени. Если он разделяет ядро с Windows, все процессы Windows будут рассмотрены до моего процесса. По сути, как мне убедиться, что мой процесс всегда находится впереди очереди обработки, или как мне назначить ядро для запуска моего процесса и оставить другое ядро для обработки Windows? Кроме того, есть ли способ увидеть, что мое программирование выполняется в режиме реального времени. АКА, это ядро обрабатывает эту программу, но это ядро ничего не делает, потому что мы сказали программе не запускаться на нем. Любой вклад будет полезен.
Там нет никакой гарантии, что ваш процесс будет рассматриваться в режиме реального времени. Windows не делает этого. Поскольку вы упоминаете о безопасности, я упомяну, что в случае судебного разбирательства у вас будут большие проблемы. Опытные свидетели будут свидетельствовать о том, что дизайн по своей сути небезопасен.
Пользовательский контроль и отображение могут выполняться в Windows, но операции в реальном времени выполняются на специальном оборудовании, таком как ПЛК.
Ты можешь использовать SetThreadAffinityMask
ограничить поток для работы на некотором подмножестве доступных процессоров / ядер.
Если вы используете SetThreadPriority
а также SetProcessPriorityClass
чтобы установить для потока приоритет в реальном времени, только другие потоки, работающие с приоритетом реального времени, могут прерывать его, эффективно заставляя другие потоки работать на других ядрах (если вы не повысите два или более потоков до приоритета реального времени.
Как альтернатива, Windows Embedded Compact ОС, основанная на приоритетах в реальном времени, которая дает мягкие гарантии в реальном времени (намного лучше, чем Windows Vista / 7). Это дорого, но наравне с другими коммерческими ОСРВ.