Kriteria Tidur Sistem
Selama sistem menentukan bahwa ada aktivitas pengguna atau aplikasi, sistem tidak akan masuk tidur. Sistem dapat mendeteksi aktivitas tertentu, seperti input pengguna atau komunikasi jaringan. Namun, ada aktivitas lain yang tidak dapat dideteksi oleh sistem. Misalnya, aplikasi presentasi memerlukan layar untuk ditampilkan. Namun, mungkin muncul bahwa aplikasi menganggur selama presentasi, menyebabkan sistem menonaktifkan tampilan.
Untuk memberi tahu sistem bahwa aplikasi Anda sibuk, gunakan fungsi SetThreadExecutionState . Fungsi ini mencegah sistem memasuki tidur atau mematikan tampilan saat aplikasi berjalan.
Aplikasi presentasi dan multimedia harus memanggil fungsi SetThreadExecutionState dengan ES_DISPLAY_REQUIRED sehingga sistem akan tahu bahwa itu seharusnya tidak membuat perangkat tampilan tertidur. Aplikasi penanganan peristiwa, seperti alat untuk mengelola faks masuk, harus memanggil SetThreadExecutionState dengan ES_SYSTEM_REQUIRED, menangani peristiwa, lalu menghapus bendera sehingga sistem dapat kembali tidur. Perhatikan bahwa sebagian besar aplikasi produktivitas tidak perlu menggunakan SetThreadExecutionState karena sistem biasanya dapat menentukan aktivitas berdasarkan input pengguna.
Untuk mempertahankan waktu sejak input pengguna terakhir, sistem menggunakan timer diam tampilan dan timer diam sistem. Sistem membandingkan timer diam dengan nilai yang dikonfigurasi dalam rencana daya. Jika nilai pengatur waktu diam tampilan lebih besar dari nilai batas waktu tampilan, dan tidak ada utas yang meminta tampilan dengan memanggil SetThreadExecutionState dengan ES_DISPLAY_REQUIRED, sistem akan mematikan tampilan. Demikian pula, jika timer diam sistem lebih besar dari nilai waktu habis sistem dan tidak ada aplikasi yang meminta sistem dengan memanggil SetThreadExecutionState dengan ES_SYSTEM_REQUIRED, sistem memasuki tidur.
Sistem mempertahankan hitungan aplikasi yang telah disebut SetThreadExecutionState. Sistem melacak setiap utas yang memanggil SetThreadExecutionState dan menyesuaikan penghitung yang sesuai. Jika penghitung ini mencapai nol dan belum ada input pengguna, sistem memasuki tidur.
Jika daya rendah, aplikasi dapat meminta intervensi pengguna atau meminta sistem menangguhkan dirinya sendiri. Anda dapat menangguhkan operasi sistem dengan menggunakan fungsi SetSuspendState .
Jika sistem bangun secara otomatis (PBT_APMRESUMEAUTOMATIC), tidak ada timer yang relevan. Untuk informasi selengkapnya, lihat Peristiwa Bangun Sistem.
Memasuki Tidur
Ketika sistem memasuki tidur, sistem akan secara otomatis mempertahankan status seluruh sistem dan semua aplikasi. Oleh karena itu, sebagian besar aplikasi tidak perlu mengambil tindakan khusus. Aplikasi yang perlu melakukan tindakan tertentu sebelum transisi sistem dapat mendaftar untuk peristiwa daya.
Ketika sistem mengirim peristiwa PBT_APMSUSPEND , setiap aplikasi memiliki dua detik untuk melakukan tindakan yang diperlukan sebelum sistem memulai transisi ke tidur. Aplikasi harus membatasi tindakan apa yang mereka ambil sebagai respons terhadap peristiwa ini untuk memastikan bahwa mereka menyelesaikan semua operasi dalam waktu yang dialokasikan.
Topik terkait