Fungsi QueueUserWorkItem (threadpoollegacyapiset.h)
Mengantrekan item kerja ke utas pekerja di kumpulan utas.
Sintaks
BOOL QueueUserWorkItem(
[in] LPTHREAD_START_ROUTINE Function,
[in, optional] PVOID Context,
[in] ULONG Flags
);
Parameter
[in] Function
Penunjuk ke fungsi panggilan balik jenis yang ditentukan aplikasi LPTHREAD_START_ROUTINE untuk dijalankan oleh utas di kumpulan utas. Nilai ini mewakili alamat awal utas. Fungsi panggilan balik ini tidak boleh memanggil fungsi TerminateThread .
Nilai yang dikembalikan dari fungsi panggilan balik tidak digunakan.
Untuk informasi selengkapnya, lihat ThreadProc.
[in, optional] Context
Nilai parameter tunggal yang akan diteruskan ke fungsi utas.
[in] Flags
Bendera yang mengontrol eksekusi. Parameter ini bisa menjadi satu atau beberapa nilai berikut.
Nilai | Makna |
---|---|
|
Secara default, fungsi panggilan balik diantrekan ke utas pekerja non-I/O.
Fungsi panggilan balik diantrekan ke utas yang menggunakan port penyelesaian I/O, yang berarti mereka tidak dapat melakukan tunggu yang dapat diingat. Oleh karena itu, jika I/O selesai dan menghasilkan APC, APC mungkin menunggu tanpa batas waktu karena tidak ada jaminan bahwa utas akan memasuki status tunggu yang dapat diperingatkan setelah panggilan balik selesai. |
|
Bendera ini tidak digunakan.
Windows Server 2003 dan Windows XP: Fungsi panggilan balik diantrekan ke utas pekerja I/O. Bendera ini harus digunakan jika fungsi harus dijalankan dalam utas yang menunggu dalam status yang dapat diperingatkan. Utas pekerja I/O dihapus dimulai dengan Windows Vista dan Windows Server 2008. |
|
Fungsi panggilan balik diantrekan ke utas yang tidak pernah berakhir. Ini tidak menjamin bahwa utas yang sama digunakan setiap kali. Bendera ini harus digunakan hanya untuk tugas singkat atau dapat memengaruhi operasi timer lainnya.
Bendera ini harus diatur jika utas memanggil fungsi yang menggunakan APC. Untuk informasi selengkapnya, lihat Panggilan Prosedur Asinkron. Perhatikan bahwa saat ini tidak ada utas pekerja yang benar-benar persisten, meskipun utas pekerja tidak berakhir jika ada permintaan I/O yang tertunda. |
|
Fungsi panggilan balik dapat melakukan penantian panjang. Bendera ini membantu sistem untuk memutuskan apakah harus membuat utas baru. |
|
Fungsi panggilan balik akan menggunakan token akses saat ini, baik itu token proses atau peniruan. Jika bendera ini tidak ditentukan, fungsi panggilan balik hanya dijalankan dengan token proses.
Windows XP: Bendera ini tidak didukung sampai Windows XP SP2 dan Windows Server 2003. |
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
Jika fungsi dalam DLL diantrekan ke utas pekerja, pastikan bahwa fungsi telah menyelesaikan eksekusi sebelum DLL dibongkar.
Secara default, kumpulan utas memiliki maksimum 512 utas per proses. Untuk menaikkan batas antrean, gunakan makro WT_SET_MAX_THREADPOOL_THREAD yang ditentukan di WinNT.h.
#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) \
((Flags)|=(Limit)<<16)
Gunakan makro ini dalam panggilan ke QueueUserWorkItem untuk menentukan parameter Bendera . Parameter makro adalah bendera yang diinginkan dan batas baru, hingga (2<<16)-1 utas. Namun, ukuran antrean dibatasi oleh ukuran kumpulan kernel yang tidak bertumpuk. Perhatikan bahwa aplikasi Anda dapat meningkatkan performanya dengan menjaga jumlah utas pekerja tetap rendah.
Untuk mengkompilasi aplikasi yang menggunakan fungsi ini, tentukan _WIN32_WINNT sebagai 0x0500 atau yang lebih baru. Untuk informasi selengkapnya, lihat Menggunakan Header Windows.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | threadpoollegacyapiset.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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk