SetPriorityClass 函式 (processthreadsapi.h)
設定指定進程的優先順序類別。 這個值與進程每個線程的優先順序值一起決定每個線程的基底優先順序層級。
語法
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
參數
[in] hProcess
進程的句柄。
句柄必須具有 PROCESS_SET_INFORMATION 訪問許可權。 如需詳細資訊,請參閱 處理安全性和訪問許可權。
[in] dwPriorityClass
進程的優先順序類別。 此參數可以是下列其中一個值。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
每個線程都有一個基底優先順序層級,由線程的優先順序值和其進程的優先順序類別決定。 系統會使用所有可執行線程的基底優先順序層級來判斷哪一個線程會取得下一個 CPU 時間配量。 SetThreadPriority 函式會啟用相對於其進程優先順序類別的線程基底優先順序層級。 如需詳細資訊,請參閱 排程優先順序。
*_PRIORITY_CLASS值會影響進程的CPU排程優先順序。 對於執行檔案 I/O、網路 I/O 或數據處理等背景工作的處理程式,無法調整 CPU 排程優先順序;即使閑置的 CPU 優先順序進程在使用磁碟和記憶體時,也可以輕鬆地干擾系統回應性。 執行背景工作的進程應該使用 PROCESS_MODE_BACKGROUND_BEGIN 和 PROCESS_MODE_BACKGROUND_END 值來調整其資源排程優先順序;與用戶互動的進程不應該使用 PROCESS_MODE_BACKGROUND_BEGIN。
如果進程處於背景處理模式,則它建立的新線程也會處於背景處理模式。 當線程處於背景處理模式時,應該將重要區段、堆積和處理等共用資源降到最低,否則可能會發生優先順序反轉。 如果有線程以高優先順序執行,背景處理模式中的線程可能不會立即排程,但永遠不會耗盡。
每個線程都可以使用 SetThreadPriority 獨立進入背景處理模式。 請勿在處理程式中的線程呼叫 SetThreadPriority 進入背景處理模式之後,請勿呼叫 SetPriority 進入背景處理模式。 進程結束背景處理模式之後,它會重設進程中的所有線程;不過,進程不可能知道哪些線程已經在背景處理模式中。
範例
下列範例示範使用進程背景模式。
#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;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |