Bagikan melalui


Fungsi tidur (synchapi.h)

Menangguhkan eksekusi utas saat ini hingga interval waktu habis berlalu.

Untuk memasukkan status tunggu yang dapat diperingatkan, gunakan fungsi SleepEx .

Sintaks

void Sleep(
  [in] DWORD dwMilliseconds
);

Parameter

[in] dwMilliseconds

Interval waktu di mana eksekusi akan ditangguhkan, dalam milidetik.

Nilai nol menyebabkan utas melepaskan sisa ikatan waktunya ke utas lain yang siap dijalankan. Jika tidak ada utas lain yang siap dijalankan, fungsi segera kembali, dan utas melanjutkan eksekusi. Windows XP: Nilai nol menyebabkan utas melepaskan sisa ikatan waktunya ke utas lain dengan prioritas yang sama yang siap dijalankan. Jika tidak ada utas lain dengan prioritas yang sama yang siap dijalankan, fungsi segera kembali, dan utas melanjutkan eksekusi. Perilaku ini berubah dimulai dengan Windows Server 2003.

Nilai INFINITE menunjukkan bahwa penangguhan tidak boleh kehabisan waktu.

Mengembalikan nilai

Tidak ada

Keterangan

Fungsi ini menyebabkan utas melepaskan sisa irisan waktunya dan menjadi tidak dapat dijalankan untuk interval berdasarkan nilai dwMilliseconds. Jam sistem "berdetak" pada tingkat konstanta. Jika dwMilliseconds kurang dari resolusi jam sistem, utas mungkin tidur kurang dari durasi waktu yang ditentukan. Jika dwMilliseconds lebih besar dari satu tick tetapi kurang dari dua, penantian bisa di mana saja antara satu dan dua kutu, dan sebagainya. Untuk meningkatkan akurasi interval tidur, panggil fungsi timeGetDevCaps untuk menentukan resolusi timer minimum yang didukung dan fungsi timeBeginPeriod untuk mengatur resolusi timer ke minimumnya. Berhati-hatilah saat memanggil timeBeginPeriod, karena panggilan yang sering dapat secara signifikan memengaruhi jam sistem, penggunaan daya sistem, dan penjadwal. Jika Anda memanggil timeBeginPeriod, sebut saja satu kali di awal aplikasi dan pastikan untuk memanggil fungsi timeEndPeriod di bagian paling akhir aplikasi.

Setelah interval tidur berlalu, utas siap dijalankan. Jika Anda menentukan 0 milidetik, utas akan melepaskan sisa ikatan waktunya tetapi tetap siap. Perhatikan bahwa utas siap tidak dijamin akan segera berjalan. Akibatnya, utas mungkin tidak berjalan sampai beberapa waktu setelah interval tidur berlalu. Untuk informasi selengkapnya, lihat Prioritas Penjadwalan.

Berhati-hatilah saat menggunakan Tidur dalam skenario berikut:

  • Kode yang secara langsung atau tidak langsung membuat jendela (misalnya, DDE dan COM CoInitialize). Jika utas membuat jendela apa pun, utas harus memproses pesan. Siaran pesan dikirim ke semua jendela dalam sistem. Jika Anda memiliki utas yang menggunakan Tidur dengan penundaan tak terbatas, sistem akan mengalami kebuntuan.
  • Utas yang berada di bawah kontrol konkurensi. Misalnya, port penyelesaian I/O atau kumpulan utas membatasi jumlah utas terkait yang dapat berjalan. Jika jumlah maksimum utas sudah berjalan, tidak ada utas terkait tambahan yang dapat berjalan hingga utas yang sedang berjalan selesai. Jika utas menggunakan Tidur dengan interval nol untuk menunggu salah satu utas terkait tambahan untuk menyelesaikan beberapa pekerjaan, prosesnya mungkin akan mengalami kebuntuan.
Untuk skenario ini, gunakan MsgWaitForMultipleObjects atau MsgWaitForMultipleObjectsEx, bukan Tidur.

Windows Phone 8.1: Fungsi ini didukung untuk aplikasi Windows Phone Store di Windows Phone 8.1 dan yang lebih baru.

Windows 8.1 dan Windows Server 2012 R2: Fungsi ini didukung untuk aplikasi Windows Store di Windows 8.1, Windows Server 2012 R2, dan yang lebih baru.

Contoh

Misalnya, lihat Menggunakan Penyimpanan Lokal Utas.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header synchapi.h (sertakan Windows.h pada Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Pustaka Kernel32.lib; WindowsPhoneCore.lib di Windows Phone 8.1
DLL Kernel32.dll; KernelBase.dll pada Windows Phone 8.1

Lihat juga

MsgWaitForMultipleObjects

MsgWaitForMultipleObjectsEx

Fungsi Proses dan Utas

SleepEx

Menangguhkan Eksekusi Utas

Threads

WaitOnAddress