if (reader.is_lazy()) goto tldr;
Tengo un subproceso de fondo que realiza un trabajo de tipo de fondo intensivo de E/S. Para complacer a los demás hilos y procesos en ejecución, me puse la prioridad de subprocesos a "modo de fondo" usando SetThreadPriority
, así:Determine si el subproceso actual tiene prioridad de E/S baja
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
Sin embargo, THREAD_MODE_BACKGROUND_BEGIN
sólo está disponible en Windows Server 2008 o posterior, así como Windows Vista y más nuevo, pero el programa también debe funcionar bien en Windows Server 2003 y XP. Por lo que el código real es de la misma familia:
if (!SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN)) {
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
}
El problema con esto es que en Windows XP se interrumpirá totalmente el sistema mediante el uso de demasiada E/S. Tengo un plan para una forma fea y vergonzosa de mitigar este problema, pero eso depende de que yo pueda determinar si el subproceso actual tiene baja prioridad de E/S o no.
Ahora, sé que puedo almacenar qué prioridad de hilo terminé configurando, pero el flujo de control en el programa no es muy adecuado para esto. Me gustaría poder probar más tarde si el subproceso actual tiene una prioridad de E/S baja, si está en "modo de fondo".
tldr:
GetThreadPriority
no parece que me diera esta información, sólo se da la prioridad de la CPU.
¿Hay alguna manera de determinar si el subproceso actual tiene baja prioridad de E/S?
¿Cómo GetThreadPriority no funciona? – Goz
@Goz: solo le da prioridad a la CPU. Actualicé la pregunta para incluir esto. –
Veo ... interesante. – Goz