Bagikan melalui


Objek Timer yang Dapat Ditunda

Objek timer yang dapat ditunggu adalah objek sinkronisasi yang statusnya diatur ke sinyal ketika waktu jatuh tempo yang ditentukan tiba. Ada dua jenis timer tunggu yang dapat dibuat: reset manual dan sinkronisasi. Timer dari salah satu jenis juga dapat menjadi timer berkala.

Objek Deskripsi
timer pengaturan ulang manual Timer yang statusnya tetap diberi sinyal hingga SetWaitableTimer dipanggil untuk menetapkan waktu jatuh tempo baru.
timer sinkronisasi Timer yang statusnya tetap diberi sinyal hingga utas menyelesaikan operasi tunggu pada objek timer.
timer berkala Timer yang diaktifkan kembali setiap kali periode yang ditentukan kedaluwarsa, hingga timer direset atau dibatalkan. Timer berkala adalah timer reset manual berkala atau timer sinkronisasi berkala.

 

Catatan

Ketika timer diberi sinyal, prosesor harus berjalan untuk memproses instruksi terkait. Timer berkala frekuensi tinggi menjaga prosesor terus sibuk, yang mencegah sistem tetap dalam status daya yang lebih rendah untuk jumlah waktu yang bermakna. Hal ini dapat berdampak negatif pada masa pakai baterai komputer portabel dan skenario yang bergantung pada manajemen daya yang efektif, seperti pusat data besar. Untuk efisiensi energi yang lebih besar, pertimbangkan untuk menggunakan pemberitahuan berbasis peristiwa alih-alih pemberitahuan berbasis waktu di aplikasi Anda. Jika timer diperlukan, gunakan timer yang disinyalkan sekali daripada timer berkala, atau atur interval ke nilai yang lebih besar dari satu detik.

 

Utas menggunakan fungsi CreateWaitableTimer atau CreateWaitableTimerEx untuk membuat objek timer. Alur pembuatan menentukan apakah timer adalah timer pengaturan ulang manual atau timer sinkronisasi. Alur pembuatan dapat menentukan nama untuk objek timer. Utas dalam proses lain dapat membuka handel ke timer yang ada dengan menentukan namanya dalam panggilan ke fungsi OpenWaitableTimer . Setiap utas dengan handel ke objek timer dapat menggunakan salah satu fungsi tunggu untuk menunggu status timer diatur ke sinyal.

  • Utas memanggil fungsi SetWaitableTimer untuk mengaktifkan timer. Perhatikan penggunaan parameter berikut untuk SetWaitableTimer:
  • Gunakan parameter lpDueTime untuk menentukan waktu di mana timer akan diatur ke status yang disinyalkan. Saat timer reset manual diatur ke status yang disinyalkan, timer tetap dalam status ini hingga SetWaitableTimer menetapkan waktu jatuh tempo baru. Ketika timer sinkronisasi diatur ke status yang disinyalir, timer tetap dalam status ini sampai utas menyelesaikan operasi tunggu pada objek timer.
  • Gunakan parameter lPeriod dari fungsi SetWaitableTimer untuk menentukan periode timer. Jika periode bukan nol, timer adalah timer berkala; ini diaktifkan kembali setiap kali periode kedaluwarsa, sampai timer diatur ulang atau dibatalkan. Jika periodenya nol, timer bukan timer berkala; itu disinyalir sekali dan kemudian dinonaktifkan.

Utas dapat menggunakan fungsi CancelWaitableTimer untuk mengatur timer ke status tidak aktif. Untuk mengatur ulang timer, panggil SetWaitableTimer. Ketika Anda selesai dengan objek timer, panggil CloseHandle untuk menutup handel ke objek timer.

Perilaku timer yang dapat ditunggu dapat diringkas sebagai berikut:

  • Ketika timer diatur, timer dibatalkan jika sudah aktif, status timer tidak ditandatangani, dan timer ditempatkan dalam antrean timer kernel.
  • Saat timer kedaluwarsa, timer diatur ke status yang disinyalkan. Jika timer memiliki rutinitas penyelesaian, timer diantrekan ke utas yang mengatur timer. Rutinitas penyelesaian tetap berada dalam antrean panggilan prosedur asinkron (APC) dari utas hingga utas memasuki status tunggu yang dapat diperingatkan. Pada saat itu, APC dikirim dan rutinitas penyelesaian dipanggil. Jika timer berkala, timer ditempatkan kembali dalam antrean timer kernel.
  • Ketika timer dibatalkan, timer dihapus dari antrean timer kernel jika tertunda. Jika timer telah kedaluwarsa dan masih ada APC yang diantrekan ke utas yang mengatur timer, APC dihapus dari antrean APC utas. Status timer yang disinyalkan tidak terpengaruh.

Panggilan Prosedur Asinkron

Menggunakan Objek Timer yang Dapat Diantisipasi