Basta ya de investigar por otros sitios ya que has llegado al espacio correcto, contamos con la solución que buscas y sin complicarte.
Solución:
Un subproceso de prioridad en tiempo real nunca puede ser reemplazado por interrupciones de temporizador y se ejecuta con una prioridad más alta que cualquier otro subproceso en el sistema. Como tal, un subproceso de prioridad en tiempo real vinculado a la CPU puede arruinar totalmente una máquina.
La creación de subprocesos de prioridad en tiempo real requiere un privilegio (SeIncreaseBasePriorityPrivilege), por lo que solo los usuarios administrativos pueden hacerlo.
Para Vista y más allá, una opción para las aplicaciones que requieren que se ejecuten con prioridades en tiempo real es usar el Servicio de programador de clases multimedia (MMCSS) y dejar que administre la prioridad de sus subprocesos. El MMCSS evitará que su aplicación use demasiado tiempo de CPU para que no tenga que preocuparse por llenar la máquina.
Simplemente, la clase de prioridad “Tiempo real” es más alta que la clase de prioridad “Alta”. No creo que haya mucho más que eso. Oh sí, tienes que tener la SeIncreaseBasePriorityPrivilege
para poner un hilo en la clase Real Time.
Windows a veces aumenta la prioridad de un subproceso por varios motivos, pero no aumenta la prioridad de un subproceso a otra clase de prioridad. Tampoco aumentará la prioridad de los subprocesos en la clase de prioridad en tiempo real. Por lo tanto, un subproceso de alta prioridad no obtendrá ningún impulso temporal automático en la clase de prioridad de tiempo real.
El capítulo “Inside Windows” de Russinovich sobre cómo Windows maneja las prioridades es un gran recurso para aprender cómo funciona esto:
- http://web.archive.org/web/20140909124652/http://download.microsoft.com/download/5/b/3/5b38800c-ba6e-4023-9078-6e9ce2383e65/C06X1116607.pdf
Tenga en cuenta que no hay absolutamente ningún problema con un subproceso que tiene una prioridad en tiempo real en un sistema Windows normal; no son necesariamente para procesos especiales que se ejecutan en máquinas dedicadas. Me imagino que los controladores y/o procesos multimedia pueden necesitar hilos con prioridad en tiempo real. Sin embargo, dicho subproceso no debería requerir mucha CPU: debería estar bloqueando la mayor parte del tiempo para que los eventos normales del sistema se procesen.
Sería la configuración de prioridad más alta disponible y, por lo general, solo se usaría en una caja dedicada a ejecutar ese programa específico. En realidad, es lo suficientemente alto como para causar la inanición de los subprocesos del teclado y el mouse hasta el punto de que dejen de responder.
Básicamente, si tienes que preguntar, no lo uses 🙂
Si guardas alguna perplejidad y capacidad de enriquecer nuestro tutorial te recordamos realizar un exégesis y con mucho gusto lo interpretaremos.