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
WT_EXECUTEDEFAULT
0x00000000
Secara default, fungsi panggilan balik diantrekan ke utas pekerja non-I/O.
WT_EXECUTEINTIMERTHREAD
0x00000020
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.

WT_EXECUTEINIOTHREAD
0x00000001
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.

WT_EXECUTEINPERSISTENTTHREAD
0x00000080
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.

WT_EXECUTELONGFUNCTION
0x00000010
Fungsi panggilan balik dapat melakukan penantian panjang. Bendera ini membantu sistem untuk memutuskan apakah harus membuat utas baru.
WT_EXECUTEONLYONCE
0x00000008
Timer akan diatur ke status sinyal hanya sekali. Jika bendera ini diatur, parameter Periode harus nol.
WT_TRANSFER_IMPERSONATION
0x00000100
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

Lihat juga

CreateTimerQueue

DeleteTimerQueueEx

DeleteTimerQueueTimer

Fungsi Sinkronisasi

Pengumpulan Utas

Antrean Timer