Tentang timer

Topik ini menjelaskan cara membuat, mengidentifikasi, mengatur, dan menghapus timer. Aplikasi menggunakan timer untuk menjadwalkan peristiwa untuk jendela setelah waktu tertentu berlalu. Setiap kali interval yang ditentukan (atau nilai waktu habis) untuk timer berlalu, sistem akan memberi tahu jendela yang terkait dengan timer. Karena akurasi timer tergantung pada laju jam sistem dan seberapa sering aplikasi mengambil pesan dari antrean pesan, nilai waktu habis hanya perkiraan.

Topik ini mencakup bagian berikut.

Operasi timer

Aplikasi membuat timer dengan menggunakan fungsi SetTimer. Timer baru mulai mengatur waktu interval segera setelah dibuat. Aplikasi dapat mengubah nilai batas waktu timer dengan menggunakan SetTimer dan dapat menghancurkan timer dengan menggunakan fungsi KillTimer . Untuk menggunakan sumber daya sistem secara efisien, aplikasi harus menghancurkan timer yang tidak lagi diperlukan.

Setiap timer memiliki pengidentifikasi unik. Saat membuat timer, aplikasi dapat menentukan pengidentifikasi atau meminta sistem membuat nilai unik. Parameter pertama pesan WM_TIMER berisi pengidentifikasi timer yang memposting pesan.

Jika Anda menentukan handel jendela dalam panggilan ke SetTimer, aplikasi mengaitkan timer dengan jendela tersebut. Setiap kali nilai batas waktu untuk timer berlalu, sistem memposting pesan WM_TIMER ke jendela yang terkait dengan timer. Jika tidak ada handel jendela yang ditentukan dalam panggilan ke SetTimer, aplikasi yang membuat timer harus memantau antrean pesannya untuk pesan WM_TIMER dan mengirimkannya ke jendela yang sesuai.

Catatan

Jika Anda menentukan fungsi panggilan balik TIMERPROC opsional, fungsi dipanggil selama Perulangan Pesan dan WM_TIMER tidak dikirim ke panggilan balik WNDPROC.

Jika Anda perlu diberi tahu saat timer berlalu, gunakan timer yang dapat ditunda. Untuk informasi selengkapnya, lihat Objek Timer yang Dapat Diantisipasi.

Timer resolusi tinggi

Penghitung adalah istilah umum yang digunakan dalam pemrograman untuk merujuk ke variabel yang bertahakan. Beberapa sistem mencakup penghitung kinerja resolusi tinggi yang menyediakan waktu yang berlalu resolusi tinggi.

Jika penghitung kinerja resolusi tinggi ada pada sistem, Anda dapat menggunakan fungsi QueryPerformanceFrequency untuk mengekspresikan frekuensi, dalam hitungan per detik. Nilai hitungan bergantung pada prosesor. Pada beberapa prosesor, misalnya, jumlahnya mungkin merupakan tingkat siklus jam prosesor.

Fungsi QueryPerformanceCounter mengambil nilai penghitung kinerja resolusi tinggi saat ini. Dengan memanggil fungsi ini di awal dan akhir bagian kode, aplikasi pada dasarnya menggunakan penghitung sebagai timer resolusi tinggi. Misalnya, misalkan QueryPerformanceFrequency menunjukkan bahwa frekuensi penghitung kinerja resolusi tinggi adalah 50.000 hitungan per detik. Jika aplikasi memanggil QueryPerformanceCounter segera sebelum dan segera setelah bagian kode ditetapkan, nilai penghitung mungkin masing-masing 1500 hitungan dan 3500. Nilai-nilai ini akan menunjukkan bahwa .04 detik (2000 hitungan) berlalu saat kode dijalankan.

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 yang dapat ditunda yang dapat dibuat: reset manual dan sinkronisasi. Timer dari salah satu jenis juga dapat menjadi timer berkala.

Utas menggunakan fungsi CreateWaitableTimer atau CreateWaitableTimerEx untuk membuat objek timer. Alur pembuatan menentukan apakah timer adalah timer reset 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.

Untuk informasi selengkapnya tentang menggunakan objek timer yang dapat ditunda untuk sinkronisasi utas, lihat Objek Timer yang Dapat Diantisipasi.