Función SetPriorityClass (processthreadsapi.h)
Establece la clase de prioridad para el proceso especificado. Este valor junto con el valor de prioridad de cada subproceso del proceso determina el nivel de prioridad base de cada subproceso.
Sintaxis
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
Parámetros
[in] hProcess
Identificador del proceso.
El identificador debe tener el derecho de acceso PROCESS_SET_INFORMATION . Para obtener más información, consulte Derechos de acceso y seguridad de procesos.
[in] dwPriorityClass
Clase de prioridad para el proceso. Este parámetro puede ser uno de los valores siguientes.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
Cada subproceso tiene un nivel de prioridad base determinado por el valor de prioridad del subproceso y la clase de prioridad de su proceso. El sistema usa el nivel de prioridad base de todos los subprocesos ejecutables para determinar qué subproceso obtiene el siguiente segmento de tiempo de CPU. La función SetThreadPriority permite establecer el nivel de prioridad base de un subproceso en relación con la clase de prioridad de su proceso. Para obtener más información, consulte Programación de prioridades.
Los valores *_PRIORITY_CLASS afectan a la prioridad de programación de CPU del proceso. Para los procesos que realizan un trabajo en segundo plano, como la E/S de archivos, la E/S de red o el procesamiento de datos, no es suficiente ajustar la prioridad de programación de cpu; incluso un proceso de prioridad de CPU inactiva puede interferir fácilmente con la capacidad de respuesta del sistema cuando usa el disco y la memoria. Los procesos que realizan un trabajo en segundo plano deben usar los valores PROCESS_MODE_BACKGROUND_BEGIN y PROCESS_MODE_BACKGROUND_END para ajustar sus prioridades de programación de recursos; los procesos que interactúan con el usuario no deben usar PROCESS_MODE_BACKGROUND_BEGIN.
Si un proceso está en modo de procesamiento en segundo plano, los nuevos subprocesos que crea también estarán en modo de procesamiento en segundo plano. Cuando un subproceso está en modo de procesamiento en segundo plano, debe minimizar el uso compartido de recursos como secciones críticas, montones y identificadores con otros subprocesos del proceso; de lo contrario, se pueden producir inversiones prioritarias. Si hay subprocesos que se ejecutan con alta prioridad, es posible que un subproceso en modo de procesamiento en segundo plano no se programe rápidamente, pero nunca se perderá.
Cada subproceso puede entrar en modo de procesamiento en segundo plano de forma independiente mediante SetThreadPriority. No llame a SetPriorityClass para entrar en el modo de procesamiento en segundo plano después de que un subproceso del proceso haya llamado a SetThreadPriority para entrar en modo de procesamiento en segundo plano. Una vez que un proceso finaliza el modo de procesamiento en segundo plano, restablece todos los subprocesos del proceso; sin embargo, no es posible que el proceso sepa qué subprocesos ya estaban en modo de procesamiento en segundo plano.
Ejemplos
En el ejemplo siguiente se muestra el uso del modo en segundo plano del proceso.
#include <windows.h>
#include <tchar.h>
int main( void )
{
DWORD dwError, dwPriClass;
if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN))
{
dwError = GetLastError();
if( ERROR_PROCESS_MODE_ALREADY_BACKGROUND == dwError)
_tprintf(TEXT("Already in background mode\n"));
else _tprintf(TEXT("Failed to enter background mode (%d)\n"), dwError);
goto Cleanup;
}
// Display priority class
dwPriClass = GetPriorityClass(GetCurrentProcess());
_tprintf(TEXT("Current priority class is 0x%x\n"), dwPriClass);
//
// Perform background work
//
;
if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END))
{
_tprintf(TEXT("Failed to end background mode (%d)\n"), GetLastError());
}
Cleanup:
// Clean up
;
return 0;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | processthreadsapi.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |