Função SetPriorityClass (processthreadsapi.h)
Define a classe de prioridade para o processo especificado. Esse valor junto com o valor de prioridade de cada thread do processo determina o nível de prioridade base de cada thread.
Sintaxe
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
Parâmetros
[in] hProcess
Um identificador para o processo.
O identificador deve ter o acesso PROCESS_SET_INFORMATION correto. Para obter mais informações, consulte Direitos de Acesso e Segurança do Processo.
[in] dwPriorityClass
A classe de prioridade para o processo. Esse parâmetro pode usar um dos valores a seguir.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
Cada thread tem um nível de prioridade base determinado pelo valor de prioridade do thread e pela classe de prioridade de seu processo. O sistema usa o nível de prioridade base de todos os threads executáveis para determinar qual thread obtém a próxima fatia de tempo de CPU. A função SetThreadPriority permite definir o nível de prioridade base de um thread em relação à classe de prioridade de seu processo. Para obter mais informações, consulte Prioridades de agendamento.
Os *_PRIORITY_CLASS valores afetam a prioridade de agendamento da CPU do processo. Para processos que executam trabalhos em segundo plano, como E/S de arquivo, E/S de rede ou processamento de dados, não é suficiente ajustar a prioridade de agendamento da CPU; até mesmo um processo de prioridade de CPU ocioso pode interferir facilmente na capacidade de resposta do sistema quando usa o disco e a memória. Os processos que executam o trabalho em segundo plano devem usar os valores PROCESS_MODE_BACKGROUND_BEGIN e PROCESS_MODE_BACKGROUND_END para ajustar suas prioridades de agendamento de recursos; processos que interagem com o usuário não devem usar PROCESS_MODE_BACKGROUND_BEGIN.
Se um processo estiver no modo de processamento em segundo plano, os novos threads que ele cria também estarão no modo de processamento em segundo plano. Quando um thread está no modo de processamento em segundo plano, ele deve minimizar o compartilhamento de recursos, como seções críticas, heaps e identificadores com outros threads no processo, caso contrário, podem ocorrer inversões prioritárias. Se houver threads em execução em alta prioridade, um thread no modo de processamento em segundo plano poderá não ser agendado imediatamente, mas nunca será ignorado.
Cada thread pode entrar no modo de processamento em segundo plano independentemente usando SetThreadPriority. Não chame SetPriorityClass para entrar no modo de processamento em segundo plano depois que um thread no processo tiver chamado SetThreadPriority para entrar no modo de processamento em segundo plano. Depois que um processo termina o modo de processamento em segundo plano, ele redefine todos os threads no processo; no entanto, não é possível que o processo saiba quais threads já estavam no modo de processamento em segundo plano.
Exemplos
O exemplo a seguir demonstra o uso do modo em segundo plano do processo.
#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 | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [aplicativos da área de trabalho | aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | processthreadsapi.h (inclua Windows.h no Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |