Bagikan melalui


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.

Prioritas Makna
ABOVE_NORMAL_PRIORITY_CLASS
0x00008000
Proses yang memiliki prioritas di atas NORMAL_PRIORITY_CLASS tetapi di bawah HIGH_PRIORITY_CLASS.
BELOW_NORMAL_PRIORITY_CLASS
0x00004000
Proses yang memiliki prioritas di atas IDLE_PRIORITY_CLASS tetapi di bawah NORMAL_PRIORITY_CLASS.
HIGH_PRIORITY_CLASS
0x00000080
Proses yang melakukan tugas penting waktu yang harus segera dijalankan. Alur proses mendahului utas proses kelas prioritas normal atau diam. Contohnya adalah Daftar Tugas, yang harus merespons dengan cepat ketika dipanggil oleh pengguna, terlepas dari beban pada sistem operasi. Gunakan perawatan ekstrem saat menggunakan kelas prioritas tinggi, karena aplikasi kelas prioritas tinggi dapat menggunakan hampir semua waktu CPU yang tersedia.
IDLE_PRIORITY_CLASS
0x00000040
Proses yang utasnya hanya berjalan saat sistem diam. Utas proses didahulukan oleh utas proses apa pun yang berjalan di kelas prioritas yang lebih tinggi. Contohnya adalah pengaman layar. Kelas prioritas diam diwarisi oleh proses anak.
NORMAL_PRIORITY_CLASS
0x00000020
Proses tanpa kebutuhan penjadwalan khusus.
PROCESS_MODE_BACKGROUND_BEGIN
0x00100000
Mulai mode pemrosesan latar belakang. Sistem menurunkan prioritas penjadwalan sumber daya dari proses (dan utasnya) sehingga dapat melakukan pekerjaan latar belakang tanpa mempengaruhi aktivitas secara signifikan di latar depan.

Nilai ini hanya dapat ditentukan jika hProcess adalah handel untuk proses saat ini. Fungsi gagal jika proses sudah dalam mode pemrosesan latar belakang.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

PROCESS_MODE_BACKGROUND_END
0x00200000
Mode pemrosesan latar belakang akhir. Sistem memulihkan prioritas penjadwalan sumber daya dari proses (dan utasnya) seperti sebelum proses memasuki mode pemrosesan latar belakang.

Nilai ini hanya dapat ditentukan jika hProcess adalah handel untuk proses saat ini. Fungsi gagal jika proses tidak dalam mode pemrosesan latar belakang.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

REALTIME_PRIORITY_CLASS
0x00000100
Proses yang memiliki prioritas setingkat mungkin. Utas proses preempt utas dari semua proses lain, termasuk proses sistem operasi yang melakukan tugas penting. Misalnya, proses real-time yang dijalankan selama lebih dari interval yang sangat singkat dapat menyebabkan cache disk tidak memerah atau menyebabkan mouse tidak responsif.

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

Lihat juga

CreateProcess

CreateThread

GetPriorityClass

GetThreadPriority

Fungsi Proses dan Utas

Proses

Prioritas Penjadwalan

SetThreadPriority