¿cómo conseguir máx. prioridad?
Mi problema es conseguir que una función (en mi caso un thread) que envia datos al puerto paralelo lo haga en intervalos de tiempo exactos sin que le afecte los cambios de ventana y la ejecución de otros programas simultaneamente. Yo trabajo en visual c++ y para el thread que cree no es suficiente con asignar prioridad THREAD_PRIORITY_HIGHEST. Agradecería que alguien me ayudara. Gracias.
Mediante la api de windows:
SetThreadPriority(HANDLE , int prioridad).
donde prioridad puede tomar diversos valores:
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_TIME_CRITICAL.
Si lo que buscas es máxima prioridad deberás usar ésta última, pero el proceso principal deberá tener prioridad: REALTIME_PRIORITY_CLASS la cual puedes modificar mediante la función
SetPriorityClass(HANDLE proceso,DWORD clase )
MUCHO OJO!!! SI NO PROGRAMAS ADECUADAMENTE Y DOS O MAS HILOS EN PARALELO ENTRAN EN BUCLES LARGOS O INFINITOS SIN LIBERAR LA CPU (se puede liberar CPU mediante la función Sleep(), scanf()...) CON PRIORIDAD TIEMPO REAL, EL SISTEMA OPERATIVO SE QUEDARÁ TOTALMENTE COLGADO, EN CASO DE SER BUCLES INFINITOS LA ÚNICA MANERA DE SALIR SERÁ RESETEANDO EXTERNAMENTE EL ORDENADOR.
Un saludo
SetThreadPriority(HANDLE , int prioridad).
donde prioridad puede tomar diversos valores:
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_IDLE
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_TIME_CRITICAL.
Si lo que buscas es máxima prioridad deberás usar ésta última, pero el proceso principal deberá tener prioridad: REALTIME_PRIORITY_CLASS la cual puedes modificar mediante la función
SetPriorityClass(HANDLE proceso,DWORD clase )
MUCHO OJO!!! SI NO PROGRAMAS ADECUADAMENTE Y DOS O MAS HILOS EN PARALELO ENTRAN EN BUCLES LARGOS O INFINITOS SIN LIBERAR LA CPU (se puede liberar CPU mediante la función Sleep(), scanf()...) CON PRIORIDAD TIEMPO REAL, EL SISTEMA OPERATIVO SE QUEDARÁ TOTALMENTE COLGADO, EN CASO DE SER BUCLES INFINITOS LA ÚNICA MANERA DE SALIR SERÁ RESETEANDO EXTERNAMENTE EL ORDENADOR.
Un saludo
