Fungsi Tidur() dalam Bahasa C

Fungsi Tidur Dalam Bahasa C



Saat kami mengembangkan program yang memerlukan interaksi pengguna, ada kalanya perlu menyesuaikan waktu sistem agar aplikasi dapat dibaca dan digunakan.

Misalnya, jika kita sedang mengembangkan aplikasi konsol di mana kita perlu memberi tahu pengguna tentang tugas yang akan dijalankan secara berurutan, pesan informasi harus bertahan selama jangka waktu yang wajar sehingga pengguna memiliki waktu untuk membacanya sebelum dihapus dan program berpindah ke perintah berikutnya.

Dalam artikel Linuxhint ini, Anda akan mempelajari cara menggunakan fungsi sleep() untuk membuat penundaan secara real time. Kami akan menunjukkan kepada Anda sintaks dan deskripsi fungsi ini, serta opsi yang disediakan POSIX untuk membuat penundaan dengan sepersekian kurang dari satu detik. Kemudian, dengan menggunakan contoh praktis, kode, dan gambar, kami akan menunjukkan kepada Anda cara menunda eksekusi suatu program dan efek sinyal pada fungsi ini.








Sintaks Fungsi Sleep() dalam Bahasa C



tidak ditandatangani ke dalam tidur ( tidak ditandatangani ke dalam detik )

Deskripsi Fungsi Sleep() dalam Bahasa C

Fungsi sleep() membuat proses atau thread tertidur selama waktu dalam detik yang ditentukan dalam argumen input “detik” yang merupakan bilangan bulat tidak bertanda tangan. Setelah fungsi sleep() dipanggil, proses pemanggilan akan tidur hingga waktu habis atau menerima sinyal.



Fungsi ini sering digunakan untuk menerapkan penundaan yang lama lebih dari 1 detik dalam pelaksanaan proses real-time. Untuk penundaan kurang dari 1 detik, POSIX menyediakan fungsi resolusi mikrodetik, usleep(), yang menggunakan pemanggilan metode yang sama seperti sleep(). Untuk penundaan kurang dari 1 mikrodetik, terdapat juga fungsi nanosleep() dengan resolusi 1 nanodetik, namun dengan metode panggilan berbeda yang menggunakan struktur “spesifikasi waktu” sebagai argumen masukan untuk menyetel waktu tunda.





Jika fungsi sleep() telah menghabiskan seluruh waktu yang ditentukan, ia akan mengembalikan 0 sebagai hasilnya. Jika eksekusi terganggu oleh kedatangan sinyal sebelum waktu yang ditentukan berlalu, ia akan mengembalikan jumlah detik yang tersisa hingga waktu tersebut.

Fungsi sleep() didefinisikan di header “unistd.h”. Untuk menggunakannya, kita perlu memasukkan file ini ke dalam kode sebagai berikut:



#termasuk

Cara Memperkenalkan Penundaan dalam Proses dengan Fungsi Sleep()

Dalam contoh ini, kita membuat pengatur waktu yang terdiri dari loop tak terbatas di mana kita mencetak pesan “Waktu yang telah berlalu” di konsol perintah, diikuti dengan detik-detik yang telah berlalu dari proses tersebut. Masing-masing loop ini diulang setiap 2 detik karena penundaan yang disebabkan oleh fungsi sleep().

Untuk melakukan ini, kami mengambil file kosong dengan ekstensi “.c” dan menambahkan header “stdio.h” dan “unistd.h” di dalamnya. Kemudian, kita membuka fungsi main() yang kosong dan mendefinisikan di dalamnya variabel detik bertipe int yang akan kita gunakan sebagai penghitung waktu yang telah berlalu.

Setelah header dimasukkan dan variabel dideklarasikan, kita membuka loop tak terbatas dan menggunakan fungsi printf() di dalamnya untuk menampilkan pesan dan nilai waktu. Pada baris berikutnya, kita menambah variabel waktu sebesar 2 dan kemudian memanggil fungsi sleep() dengan nilai 2 sebagai argumen masukan. Dengan cara ini, siklus ini diulangi setiap detik dan kami mendapatkan penghitung yang menampilkan waktu yang telah berlalu di layar. Sekarang mari kita lihat kode untuk aplikasi ini. Mari kita lihat kode lengkap untuk contoh ini:

#termasuk
#termasuk

ruang kosong utama ( )
{
ke dalam detik = 0 ;
ketika ( 1 )
{
printf ( 'Waktu yang berlalu: %i \N ' , detik ) ;
detik += 2 ;
tidur ( 2 ) ;
}

}

Berikut ini kita akan melihat gambar kompilasi dan eksekusi kode ini. Seperti yang bisa kita lihat, setiap 2 detik, program mencetak detik-detik yang telah berlalu di layar sejak eksekusi proses.

Pengaruh Sinyal pada Fungsi Sleep()

Dalam contoh ini, kita ingin mengamati pengaruh sinyal pada proses yang dialihkan ke mode tidur menggunakan fungsi sleep(). Untuk melakukan hal ini, kita membuat aplikasi sederhana yang terdiri dari fungsi main() dan handler untuk sinyal 36.

Pada baris pertama fungsi main(), kita mendeklarasikan variabel sisa bertipe int tempat kita menyimpan nilai yang dikembalikan oleh fungsi sleep(). Kemudian, kita menggunakan fungsi signal() untuk mengikat handler ke sinyal 36. Pada baris berikutnya, kita menampilkan PID dari proses yang kemudian kita gunakan untuk mengirim sinyal dari shell kedua ke proses tersebut. Terakhir, kita memanggil fungsi sleep() dan menyetel argumen inputnya menjadi 60 detik, cukup lama untuk mengirim sinyal dari shell kedua. Kami mengirimkan variabel yang tersisa sebagai argumen keluaran ke sleep().

Penangan yang melekat pada sinyal 36 terdiri dari sebaris kode dimana fungsi printf() mencetak pesan “Sisa waktu:” diikuti dengan nilai yang dikembalikan oleh sleep() pada saat sinyal tiba pada proses. Di sini, mari kita lihat kode untuk contoh ini.

#termasuk
#termasuk
#termasuk
#termasuk

ruang kosong penangan ( ke dalam tersisa ) ;

ruang kosong utama ( )
{
ke dalam tersisa ;
sinyal ( 36 , penangan ) ;
printf ( 'ID Proses: %i \N ' , getpid ( ) ) ;
tersisa = tidur ( 60 ) ;
}

ruang kosong penangan ( ke dalam tersisa )

{
printf ( 'Sisa waktu: %i \N ' , tersisa ) ;
}

Gambar berikut yang kita lihat menunjukkan kompilasi dan eksekusi kode ini:

Untuk melihat pengaruh sinyal dalam proses ini, kami mengkompilasi kode ini dan menjalankannya. Kemudian, dari terminal kedua, kami mengirimkan sinyal dengan sintaks berikut:

membunuh - n sinyal PID

Gambar berikut yang kita lihat menunjukkan eksekusi kode pada konsol sebelumnya dan efek dari datangnya sinyal yang dikirimkan dari konsol berikut. Seperti yang Anda lihat, sinyal telah menekan efek fungsi sleep() dengan membangunkan proses:

Kesimpulan

Dalam artikel Linuxhint ini, kami menunjukkan kepada Anda cara menggunakan fungsi sleep() untuk mengalihkan proses ke mode tidur selama beberapa detik tertentu. Kami juga menunjukkan kepada Anda sintaks serta deskripsi fungsi dan metode pemanggilan.

Dengan menggunakan contoh praktis, cuplikan kode, dan gambar, kami menunjukkan kepada Anda cara mengalihkan proses ke mode tidur dan apa yang memengaruhi kedatangan sinyal pada proses tidur menggunakan fungsi sleep().