Fungsi SetPriorityClass (processthreadsapi.h)
Mengatur kelas prioritas untuk proses yang ditentukan. Nilai ini bersama dengan nilai prioritas setiap utas proses menentukan tingkat prioritas dasar setiap utas.
Sintaks
BOOL SetPriorityClass(
[in] HANDLE hProcess,
[in] DWORD dwPriorityClass
);
Parameter
[in] hProcess
Handel untuk proses.
Handel harus memiliki hak akses PROCESS_SET_INFORMATION . Untuk informasi selengkapnya, lihat Keamanan Proses dan Hak Akses.
[in] dwPriorityClass
Kelas prioritas untuk proses tersebut. Parameter ini bisa menjadi salah satu nilai berikut.
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Setiap utas memiliki tingkat prioritas dasar yang ditentukan oleh nilai prioritas utas dan kelas prioritas prosesnya. Sistem menggunakan tingkat prioritas dasar dari semua utas yang dapat dieksekusi untuk menentukan utas mana yang mendapatkan ipotong waktu CPU berikutnya. Fungsi SetThreadPriority memungkinkan pengaturan tingkat prioritas dasar utas relatif terhadap kelas prioritas prosesnya. Untuk informasi selengkapnya, lihat Prioritas Penjadwalan.
Nilai *_PRIORITY_CLASS memengaruhi prioritas penjadwalan CPU proses. Untuk proses yang melakukan pekerjaan latar belakang seperti I/O file, I/O jaringan, atau pemrosesan data, tidak cukup untuk menyesuaikan prioritas penjadwalan CPU; bahkan proses prioritas CPU diam dapat dengan mudah mengganggu responsivitas sistem ketika menggunakan disk dan memori. Proses yang melakukan pekerjaan latar belakang harus menggunakan nilai PROCESS_MODE_BACKGROUND_BEGIN dan PROCESS_MODE_BACKGROUND_END untuk menyesuaikan prioritas penjadwalan sumber dayanya; proses yang berinteraksi dengan pengguna tidak boleh menggunakan PROCESS_MODE_BACKGROUND_BEGIN.
Jika proses berada dalam mode pemrosesan latar belakang, utas baru yang dibuatnya juga akan berada dalam mode pemrosesan latar belakang. Ketika utas berada dalam mode pemrosesan latar belakang, alur harus meminimalkan berbagi sumber daya seperti bagian penting, tumpukan, dan menangani dengan utas lain dalam proses, jika tidak, inversi prioritas dapat terjadi. Jika ada utas yang dijalankan pada prioritas tinggi, utas dalam mode pemrosesan latar belakang mungkin tidak segera dijadwalkan, tetapi tidak akan pernah kelaparan.
Setiap utas dapat memasuki mode pemrosesan latar belakang secara independen menggunakan SetThreadPriority. Jangan panggil SetPriorityClass untuk memasuki mode pemrosesan latar belakang setelah utas dalam proses telah disebut SetThreadPriority untuk memasuki mode pemrosesan latar belakang. Setelah proses mengakhiri mode pemrosesan latar belakang, ia mengatur ulang semua utas dalam proses; namun, tidak mungkin bagi proses untuk mengetahui utas mana yang sudah dalam mode pemrosesan latar belakang.
Contoh
Contoh berikut menunjukkan penggunaan mode latar belakang proses.
#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;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | processthreadsapi.h (termasuk Windows.h pada Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |