Bagikan melalui


Fungsi SetThreadPriority (processthreadsapi.h)

Mengatur nilai prioritas untuk utas yang ditentukan. Nilai ini, bersama dengan kelas prioritas proses utas, menentukan tingkat prioritas dasar utas.

Sintaks

BOOL SetThreadPriority(
  [in] HANDLE hThread,
  [in] int    nPriority
);

Parameter

[in] hThread

Handel ke utas yang nilai prioritasnya akan ditetapkan.

Handel harus memiliki hak akses THREAD_SET_INFORMATION atau THREAD_SET_LIMITED_INFORMATION . Untuk informasi selengkapnya, lihat Keamanan Utas dan Hak Akses. Windows Server 2003: Handel harus memiliki hak akses THREAD_SET_INFORMATION .

[in] nPriority

Nilai prioritas untuk utas. Parameter ini bisa menjadi salah satu nilai berikut.

Prioritas Makna
THREAD_MODE_BACKGROUND_BEGIN
0x00010000
Mulai mode pemrosesan latar belakang. Sistem menurunkan prioritas penjadwalan sumber daya utas sehingga dapat melakukan pekerjaan latar belakang tanpa mempengaruhi aktivitas secara signifikan di latar depan.

Nilai ini hanya dapat ditentukan jika hThread adalah handel ke utas saat ini. Fungsi gagal jika utas sudah dalam mode pemrosesan latar belakang.

Windows Server 2003: Nilai ini tidak didukung.

THREAD_MODE_BACKGROUND_END
0x00020000
Akhiri mode pemrosesan latar belakang. Sistem memulihkan prioritas penjadwalan sumber daya utas seperti sebelum utas memasuki mode pemrosesan latar belakang.

Nilai ini hanya dapat ditentukan jika hThread adalah handel ke utas saat ini. Fungsi gagal jika utas tidak dalam mode pemrosesan latar belakang.

Windows Server 2003: Nilai ini tidak didukung.

THREAD_PRIORITY_ABOVE_NORMAL
1
Prioritas 1 poin di atas kelas prioritas.
THREAD_PRIORITY_BELOW_NORMAL
-1
Prioritas 1 poin di bawah kelas prioritas.
THREAD_PRIORITY_HIGHEST
2
Prioritas 2 poin di atas kelas prioritas.
THREAD_PRIORITY_IDLE
-15
Prioritas dasar 1 untuk proses IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, atau HIGH_PRIORITY_CLASS , dan prioritas dasar 16 untuk proses REALTIME_PRIORITY_CLASS .
THREAD_PRIORITY_LOWEST
-2
Prioritas 2 poin di bawah kelas prioritas.
THREAD_PRIORITY_NORMAL
0
Prioritas normal untuk kelas prioritas.
THREAD_PRIORITY_TIME_CRITICAL
15
Prioritas dasar 15 untuk proses IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, atau HIGH_PRIORITY_CLASS , dan prioritas dasar 31 untuk proses REALTIME_PRIORITY_CLASS .
 

Jika utas memiliki kelas dasar REALTIME_PRIORITY_CLASS , parameter ini juga bisa -7, -6, -5, -4, -3, 3, 4, 5, atau 6. Untuk informasi selengkapnya, lihat Prioritas Penjadwalan.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Windows Phone 8.1: aplikasi Windows Phone Store dapat memanggil fungsi ini tetapi tidak berpengaruh. Fungsi akan mengembalikan nilai bukan nol yang menunjukkan keberhasilan.

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 iringan waktu CPU berikutnya. Utas dijadwalkan dengan cara round-robin di setiap tingkat prioritas, dan hanya ketika tidak ada utas yang dapat dieksekusi pada tingkat yang lebih tinggi, penjadwalan utas pada tingkat yang lebih rendah terjadi.

Fungsi SetThreadPriority memungkinkan pengaturan tingkat prioritas dasar utas relatif terhadap kelas prioritas prosesnya. Misalnya, menentukan THREAD_PRIORITY_HIGHEST dalam panggilan ke SetThreadPriority untuk utas proses IDLE_PRIORITY_CLASS mengatur tingkat prioritas dasar utas ke 6. Untuk tabel yang memperlihatkan tingkat prioritas dasar untuk setiap kombinasi kelas prioritas dan nilai prioritas utas, lihat Prioritas Penjadwalan.

Untuk proses IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, dan HIGH_PRIORITY_CLASS , sistem secara dinamis meningkatkan tingkat prioritas dasar utas ketika peristiwa terjadi yang penting untuk utas. REALTIME_PRIORITY_CLASS proses tidak menerima peningkatan dinamis.

Semua utas awalnya dimulai pada THREAD_PRIORITY_NORMAL. Gunakan fungsi GetPriorityClass dan SetPriorityClass untuk mendapatkan dan mengatur kelas prioritas proses. Gunakan fungsi GetThreadPriority untuk mendapatkan nilai prioritas utas.

Gunakan kelas prioritas proses untuk membedakan antara aplikasi yang sangat penting waktu dan yang memiliki persyaratan penjadwalan normal atau di bawah normal. Gunakan nilai prioritas utas untuk membedakan prioritas relatif tugas proses. Misalnya, utas yang menangani input untuk jendela dapat memiliki tingkat prioritas yang lebih tinggi daripada utas yang melakukan perhitungan intensif untuk CPU.

Saat memanipulasi prioritas, berhati-hatilah untuk memastikan bahwa utas prioritas tinggi tidak mengonsumsi semua waktu CPU yang tersedia. Utas dengan tingkat prioritas dasar di atas 11 mengganggu pengoperasian normal sistem operasi. Menggunakan REALTIME_PRIORITY_CLASS dapat menyebabkan cache disk tidak memerah, menyebabkan mouse berhenti merespons, dan sebagainya.

Nilai THREAD_PRIORITY_* memengaruhi prioritas penjadwalan CPU utas. Untuk utas yang melakukan pekerjaan latar belakang seperti I/O file, I/O jaringan, atau pemrosesan data, tidak cukup untuk menyesuaikan prioritas penjadwalan CPU; bahkan utas prioritas CPU menganggur dapat dengan mudah mengganggu responsivitas sistem ketika menggunakan disk dan memori. Utas yang melakukan pekerjaan latar belakang harus menggunakan nilai THREAD_MODE_BACKGROUND_BEGIN dan THREAD_MODE_BACKGROUND_END untuk menyesuaikan prioritas penjadwalan sumber dayanya; utas yang berinteraksi dengan pengguna tidak boleh menggunakan THREAD_MODE_BACKGROUND_BEGIN.

Ketika utas berada dalam mode pemrosesan latar belakang, utas harus meminimalkan berbagi sumber daya seperti bagian penting, tumpukan, dan penanganan 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.

Windows Server 2008 dan Windows Vista: Saat sistem dimulai, fungsi SetThreadPriority mengembalikan nilai pengembalian keberhasilan tetapi tidak mengubah prioritas utas untuk aplikasi yang dimulai dari folder Startup sistem atau tercantum dalam HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run kunci registri. Aplikasi ini berjalan pada prioritas yang dikurangi untuk waktu yang singkat (sekitar 60 detik) untuk membuat sistem lebih responsif terhadap tindakan pengguna selama startup.

Windows 8.1 dan Windows Server 2012 R2: Fungsi ini didukung untuk aplikasi Windows Store.

Windows Phone 8.1:Windows Phone Store dapat memanggil fungsi ini tetapi tidak berpengaruh.

Contoh

Contoh berikut menunjukkan penggunaan mode latar belakang utas.

#include <windows.h>
#include <tchar.h>

int main( void )
{
   DWORD dwError, dwThreadPri;

   if(!SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN))
   {
      dwError = GetLastError();
      if( ERROR_THREAD_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 thread priority

   dwThreadPri = GetThreadPriority(GetCurrentThread());

   _tprintf(TEXT("Current thread priority is 0x%x\n"), dwThreadPri);

   //
   // Perform background work
   //
   ;

   if(!SetThreadPriority(GetCurrentThread(), THREAD_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 Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Pustaka Kernel32.lib; WindowsPhoneCore.lib di Windows Phone 8.1
DLL Kernel32.dll; KernelBase.dll pada Windows Phone 8.1

Lihat juga

GetPriorityClass

GetThreadPriority

Fungsi Proses dan Utas

Prioritas Penjadwalan

SetPriorityClass

Threads