Fungsi WdfTimerStart (wdftimer.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfTimerStart memulai jam timer.
Sintaks
BOOLEAN WdfTimerStart(
[in] WDFTIMER Timer,
[in] LONGLONG DueTime
);
Parameter
[in] Timer
Handel ke objek pengatur waktu kerangka kerja yang diperoleh dengan memanggil WdfTimerCreate.
[in] DueTime
Periode waktu, dalam unit waktu sistem (interval 100 nanodetik). Kerangka kerja memanggil fungsi panggilan balik EvtTimerFunc driver saat periode waktu yang ditentukan berlalu. Nilai periode waktu bisa negatif atau positif sebagai berikut:
- Jika nilainya negatif, periode waktu relatif terhadap waktu sistem saat ini.
- Jika nilainya positif, periode waktu menentukan waktu absolut (yang sebenarnya relatif terhadap 1 Januari 1601).
Peringatan
Jika Anda mengatur anggota UseHighResolutionTimerdari WDF_TIMER_CONFIG ke WdfTrue, Anda harus memanggil WdfTimerStart dengan parameter DueTime yang diatur ke nilai negatif. Jika tidak, panggilan menyebabkan sistem mengalami crash.
Waktu relatif tidak dipengaruhi oleh perubahan apa pun pada waktu sistem yang mungkin terjadi dalam periode waktu yang ditentukan. Waktu absolut memang mencerminkan perubahan waktu sistem.
Kerangka kerja menyediakan fungsi konversi waktu yang mengonversi nilai waktu menjadi unit waktu sistem.
Nilai kembali
WdfTimerStart mengembalikan TRUE jika objek timer berada dalam antrean timer sistem. Jika tidak, metode ini mengembalikan FALSE. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Keterangan
Driver harus selalu memanggil WdfTimerStart untuk memulai timer setelah membuatnya, terlepas dari apakah timer adalah timer berkala atau tidak.
Setelah driver memanggil WdfTimerStart, kerangka kerja memanggil fungsi panggilan balik EvtTimerFunc driver ketika waktu yang ditentukan untuk parameter DueTime berlalu. Setelah panggilan pertama ini, kerangka kerja memanggil fungsi panggilan balik setiap kali periode waktu yang ditentukan oleh anggota Periode dari struktur WDF_TIMER_CONFIG driver berlalu.
Kedaluwarsa timer pada akhirnya tergantung pada granularitas jam sistem. Nilai yang ditentukan untuk DueTime menjamin bahwa kerangka kerja memanggil fungsi panggilan balik EvtTimerFunc driver pada atau setelah DueTime yang diberikan. Namun, WdfTimerStart tidak dapat mengambil alih granularitas jam sistem, apa pun nilai yang ditentukan untuk DueTime.
Ketika driver memanggil WdfTimerStart, objek timer-nya ditambahkan ke antrean objek timer sistem. Jika timer bukan timer berkala, sistem akan menghapus objek timer dari antrean setelah "waktu jatuh tempo" timer berlalu. Jika timer adalah timer berkala, objek timer tetap dalam antrean hingga driver memanggil WdfTimerStop.
Driver mungkin memanggil WdfTimerStart dari fungsi panggilan balik EvtTimerFunc untuk memulai ulang timer non-berkala setelah kedaluwarsa.
WdfTimerStart mengembalikan TRUE jika driver sebelumnya disebut WdfTimerStart dan objek timer masih dalam antrean sistem karena periode waktu belum berlalu (atau karena merupakan timer berkala). Sebelum WdfTimerStart mengembalikan TRUE, sistem operasi mengatur ulang periode waktu ke nilai yang ditentukan driver dalam panggilan baru ke WdfTimerStart. Kerangka kerja memanggil fungsi panggilan balik EvtTimerFunc hanya setelah periode waktu baru berlalu.
Untuk menghentikan jam timer, driver dapat memanggil WdfTimerStop.
Untuk informasi selengkapnya tentang objek timer kerangka kerja, lihat Menggunakan Timer.
Contoh
Contoh kode berikut memulai timer. Kerangka kerja akan memanggil fungsi panggilan balik EvtTimerFunc timer setelah 10 milidetik.
BOOLEAN inTimerQueue;
inTimerQueue = WdfTimerStart(
timerHandle,
WDF_REL_TIMEOUT_IN_MS(10)
);
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdftimer.h (termasuk Wdf.h) |
Pustaka | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Aturan kepatuhan DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |