SetPriorityClass-Funktion (processthreadsapi.h)
Legt die Prioritätsklasse für den angegebenen Prozess fest. Dieser Wert bestimmt zusammen mit dem Prioritätswert jedes Threads des Prozesses die Basisprioritätsebene jedes Threads.
Syntax
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
Parameter
[in] hProcess
Ein Handle für den Prozess.
Das Handle muss über das Zugriffsrecht PROCESS_SET_INFORMATION verfügen. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.
[in] dwPriorityClass
Die Prioritätsklasse für den Prozess. Dieser Parameter kann einen der folgenden Werte annehmen.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Hinweise
Jeder Thread verfügt über eine Basisprioritätsebene, die durch den Prioritätswert des Threads und die Prioritätsklasse des Prozesses bestimmt wird. Das System verwendet die Basisprioritätsebene aller ausführbaren Threads, um zu bestimmen, welcher Thread den nächsten Slice der CPU-Zeit erhält. Die SetThreadPriority-Funktion ermöglicht das Festlegen der Basisprioritätsebene eines Threads relativ zur Prioritätsklasse seines Prozesses. Weitere Informationen finden Sie unter Planungsprioritäten.
Die Werte *_PRIORITY_CLASS wirken sich auf die CPU-Planungspriorität des Prozesses aus. Für Prozesse, die Hintergrundarbeit wie Datei-E/A, Netzwerk-E/A oder Datenverarbeitung ausführen, reicht es nicht aus, die CPU-Planungspriorität anzupassen. selbst ein CPU-Prioritätsprozess im Leerlauf kann die Systemreaktion leicht beeinträchtigen, wenn er den Datenträger und den Arbeitsspeicher verwendet. Prozesse, die Hintergrundarbeit ausführen, sollten die PROCESS_MODE_BACKGROUND_BEGIN - und PROCESS_MODE_BACKGROUND_END-Werte verwenden, um ihre Ressourcenplanungsprioritäten anzupassen. Prozesse, die mit dem Benutzer interagieren, sollten nicht PROCESS_MODE_BACKGROUND_BEGIN verwenden.
Wenn sich ein Prozess im Hintergrundverarbeitungsmodus befindet, befinden sich die neuen Threads, die er erstellt, ebenfalls im Hintergrundverarbeitungsmodus. Wenn sich ein Thread im Hintergrundverarbeitungsmodus befindet, sollte er die Freigabe von Ressourcen wie kritische Abschnitte, Heaps und Handles mit anderen Threads im Prozess minimieren, da andernfalls Prioritätsinversionen auftreten können. Wenn Threads mit hoher Priorität ausgeführt werden, wird ein Thread im Hintergrundverarbeitungsmodus möglicherweise nicht sofort geplant, aber er wird nie ausgehungert.
Jeder Thread kann mit SetThreadPriority unabhängig in den Hintergrundverarbeitungsmodus wechseln. Rufen Sie SetPriorityClass nicht auf, um in den Hintergrundverarbeitungsmodus zu wechseln, nachdem ein Thread im Prozess SetThreadPriority aufgerufen hat, um in den Hintergrundverarbeitungsmodus zu wechseln. Nachdem ein Prozess den Hintergrundverarbeitungsmodus beendet hat, setzt er alle Threads im Prozess zurück. Es ist jedoch nicht möglich, dass der Prozess weiß, welche Threads sich bereits im Hintergrundverarbeitungsmodus befanden.
Beispiele
Im folgenden Beispiel wird die Verwendung des Prozesshintergrundmodus veranschaulicht.
#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;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | processthreadsapi.h (enthalten Windows.h unter Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Bibliothek | Kernel32.lib |
DLL | Kernel32.dll |