Fungsi CreateTimerQueueTimer (threadpoollegacyapiset.h)
Membuat timer-queue timer. Timer ini kedaluwarsa pada waktu jatuh tempo yang ditentukan, kemudian setelah setiap periode yang ditentukan. Ketika timer kedaluwarsa, fungsi panggilan balik dipanggil.
Sintaks
BOOL CreateTimerQueueTimer(
[out] PHANDLE phNewTimer,
[in, optional] HANDLE TimerQueue,
[in] WAITORTIMERCALLBACK Callback,
[in, optional] PVOID Parameter,
[in] DWORD DueTime,
[in] DWORD Period,
[in] ULONG Flags
);
Parameter
[out] phNewTimer
Penunjuk ke buffer yang menerima handel ke timer antrean timer saat kembali. Ketika handel ini telah kedaluwarsa dan tidak lagi diperlukan, lepaskan dengan memanggil DeleteTimerQueueTimer.
[in, optional] TimerQueue
Handel ke antrean timer. Handel ini dikembalikan oleh fungsi CreateTimerQueue .
Jika parameter ini ADALAH NULL, timer dikaitkan dengan antrean timer default.
[in] Callback
Penunjuk ke fungsi jenis WAITORTIMERCALLBACK yang ditentukan aplikasi yang akan dijalankan saat timer kedaluwarsa. Untuk informasi selengkapnya, lihat WaitOrTimerCallback.
[in, optional] Parameter
Nilai parameter tunggal yang akan diteruskan ke fungsi panggilan balik.
[in] DueTime
Jumlah waktu dalam milidetik relatif terhadap waktu saat ini yang harus berlalu sebelum timer disinyalkan untuk pertama kalinya.
[in] Period
Periode timer, dalam milidetik. Jika parameter ini nol, timer disinyalkan sekali. Jika parameter ini lebih besar dari nol, timer berkala. Timer berkala secara otomatis mengaktifkan kembali setiap kali periode berlalu, hingga timer dibatalkan.
[in] Flags
Parameter ini bisa menjadi satu atau beberapa nilai berikut dari WinNT.h.
Nilai | Makna |
---|---|
|
Secara default, fungsi panggilan balik diantrekan ke utas pekerja non-I/O. |
|
Fungsi panggilan balik dipanggil oleh utas timer itu sendiri. Bendera ini harus digunakan hanya untuk tugas singkat atau dapat memengaruhi operasi timer lainnya.
Fungsi panggilan balik diantrekan sebagai APC. Seharusnya tidak melakukan operasi tunggu yang dapat diperingatkan. |
|
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 tidak ada utas pekerja yang akan 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. |
|
Timer akan diatur ke status sinyal hanya sekali. Jika bendera ini diatur, parameter Periode harus nol. |
|
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 dengan SP2 dan Windows Server 2003. |
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.
Keterangan
Jika parameter DueTime dan Period sama-sama bukan nol, timer akan diberi sinyal terlebih dahulu pada waktu jatuh tempo, maka secara berkala. Panggilan balik dipanggil setiap kali periode berlalu, apakah panggilan balik sebelumnya telah selesai dieksekusi atau tidak. Fungsi panggilan balik diantrekan ke kumpulan utas. Utas ini tunduk pada penjadwalan penundaan, sehingga waktunya dapat bervariasi tergantung pada apa lagi yang terjadi dalam aplikasi atau sistem.
Waktu yang dihabiskan sistem dalam tidur atau hibernasi tidak dihitung terhadap kedaluwarsa timer. Timer disinyalkan ketika jumlah kumulatif waktu yang berlalu yang dihabiskan sistem dalam status bangun cocok dengan waktu atau periode jatuh tempo timer.
Windows Server 2003 dan Windows XP: Waktu yang dihabiskan sistem dalam tidur atau hibernasi dihitung menuju kedaluwarsa timer. Jika timer kedaluwarsa saat sistem tidur, timer akan segera disinyalkan ketika sistem bangun.
Untuk membatalkan timer, panggil fungsi DeleteTimerQueueTimer . Untuk membatalkan semua timer dalam antrean timer, panggil fungsi DeleteTimerQueueEx .
Secara default, kumpulan utas memiliki maksimum 500 utas. Untuk menaikkan batas ini, gunakan makro WT_SET_MAX_THREADPOOL_THREAD yang ditentukan dalam WinNT.h.
#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) \
((Flags)|=(Limit)<<16)
Gunakan makro ini saat menentukan parameter Bendera . Parameter makro adalah bendera yang diinginkan dan batas baru (hingga (2<<16)-1 utas). Namun, 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.
Contoh
Untuk contoh yang menggunakan CreateTimerQueueTimer, lihat Menggunakan Antrean Timer.
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 |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |