Fungsi Sleep() dalam Bahasa C

Fungsi Sleep Dalam Bahasa C



Apabila kami membangunkan atur cara yang memerlukan interaksi pengguna, terdapat kes di mana perlu melaraskan masa sistem supaya aplikasi boleh dibaca dan mudah digunakan.

Sebagai contoh, jika kami sedang membangunkan aplikasi konsol di mana kami perlu memaklumkan kepada pengguna tentang tugasan yang akan dilaksanakan mengikut turutan, mesej maklumat harus berterusan untuk masa yang munasabah supaya pengguna mempunyai masa untuk membacanya sebelum ia dibersihkan dan program bergerak ke arahan seterusnya.

Dalam artikel Linuxhint ini, anda akan belajar cara menggunakan fungsi sleep() untuk membuat kelewatan dalam masa nyata. Kami akan menunjukkan kepada anda sintaks dan perihalan fungsi ini, serta pilihan yang POSIX sediakan untuk membuat kelewatan dengan pecahan kurang daripada satu saat. Kemudian, menggunakan contoh praktikal, kod dan gambar, kami akan menunjukkan kepada anda cara untuk menangguhkan pelaksanaan program dan kesan isyarat pada fungsi ini.








Sintaks Fungsi Sleep() dalam Bahasa C



tidak ditandatangani int tidur ( tidak ditandatangani int sec )

Perihalan Fungsi Sleep() dalam Bahasa C

Fungsi sleep() meletakkan proses atau benang untuk tidur untuk masa dalam beberapa saat yang dinyatakan dalam argumen input 'saat' yang merupakan integer tidak bertanda. Sebaik sahaja fungsi sleep() dipanggil, proses panggilan tidur sehingga ia tamat masa atau menerima isyarat.



Fungsi ini sering digunakan untuk menguatkuasakan kelewatan yang lama lebih daripada 1 saat dalam pelaksanaan proses masa nyata. Untuk kelewatan kurang daripada 1 saat, POSIX menyediakan fungsi resolusi mikrosaat, usleep(), yang menggunakan panggilan kaedah yang sama seperti sleep(). Untuk kelewatan kurang daripada 1 mikrosaat, terdapat juga fungsi nanosleep() dengan resolusi 1 nanosaat, tetapi dengan kaedah panggilan yang berbeza di mana ia menggunakan struktur 'timespec' sebagai argumen input untuk menetapkan masa tunda.





Jika fungsi sleep() telah menggunakan semua masa yang ditentukan, ia mengembalikan 0 sebagai hasilnya. Jika pelaksanaan terganggu oleh ketibaan isyarat sebelum masa yang ditentukan telah berlalu, ia mengembalikan bilangan saat yang tinggal sehingga masa itu.

Fungsi sleep() ditakrifkan dalam pengepala 'uistd.h'. Untuk menggunakannya, kita perlu memasukkan fail ini dalam kod seperti berikut:



#include

Cara Memperkenalkan Kelewatan dalam Proses dengan Fungsi Sleep().

Dalam contoh ini, kami mencipta pemasa yang terdiri daripada gelung tak terhingga di mana kami mencetak mesej 'Masa berlalu' dalam konsol arahan, diikuti dengan detik berlalu proses. Setiap gelung ini diulang setiap 2 saat kerana kelewatan yang disebabkan oleh fungsi sleep().

Untuk melakukan ini, kami mengambil fail kosong dengan sambungan '.c' dan menambah pengepala 'stdio.h' dan 'unistd.h' di dalamnya. Kemudian, kami membuka fungsi main() kosong dan mentakrifkan di dalamnya detik pembolehubah jenis int yang akan kami gunakan sebagai pembilang untuk masa yang berlalu.

Setelah pengepala dimasukkan dan pembolehubah diisytiharkan, kami membuka gelung tak terhingga dan menggunakan fungsi printf() di dalamnya untuk memaparkan mesej dan nilai masa. Pada baris seterusnya, kami menambah pembolehubah masa sebanyak 2 dan kemudian memanggil fungsi sleep() dengan nilai 2 sebagai hujah input. Dengan cara ini, kitaran ini diulang setiap saat dan kami mendapat pembilang yang memaparkan masa berlalu pada skrin. Sekarang, mari kita lihat kod untuk aplikasi ini. Mari lihat kod lengkap untuk contoh ini:

#include
#include

batal utama ( )
{
int detik = 0 ;
sementara ( 1 )
{
printf ( 'Masa berlalu: %i \n ' , detik ) ;
detik += 2 ;
tidur ( 2 ) ;
}

}

Dalam berikut, kita akan melihat gambar dengan penyusunan dan pelaksanaan kod ini. Seperti yang kita dapat lihat, setiap 2 saat, program mencetak detik yang berlalu pada skrin sejak pelaksanaan proses tersebut.

Kesan Isyarat pada Fungsi Sleep().

Dalam contoh ini, kami ingin melihat kesan isyarat pada proses yang ditidurkan menggunakan fungsi sleep(). Untuk melakukan ini, kami mencipta aplikasi mudah yang terdiri daripada fungsi main() dan pengendali untuk isyarat 36.

Dalam baris pertama fungsi main(), kami mengisytiharkan baki pembolehubah jenis int di mana kami menyimpan nilai yang dikembalikan oleh fungsi sleep(). Kemudian, kami menggunakan fungsi signal() untuk mengikat pengendali kepada isyarat 36. Pada baris seterusnya, kami memaparkan PID proses yang kemudian kami gunakan untuk menghantar isyarat daripada cangkerang kedua kepada proses. Akhir sekali, kami memanggil fungsi sleep() dan menetapkan argumen inputnya kepada 60 saat, cukup lama untuk menghantar isyarat daripada cangkerang kedua. Kami menghantar pembolehubah yang tinggal sebagai hujah output ke sleep().

Pengendali yang dilampirkan pada isyarat 36 terdiri daripada baris kod di mana fungsi printf() mencetak mesej 'Baki masa:' diikuti dengan nilai yang dikembalikan oleh sleep() pada masa isyarat tiba pada proses. Di sini, mari kita lihat kod untuk contoh ini.

#include
#include
#include
#include

batal pengendali ( int yang tinggal ) ;

batal utama ( )
{
int yang tinggal ;
isyarat ( 36 , pengendali ) ;
printf ( 'ID Proses: %i \n ' , getpid ( ) ) ;
yang tinggal = tidur ( 60 ) ;
}

batal pengendali ( int yang tinggal )

{
printf ( 'Masa yang tinggal: %i \n ' , yang tinggal ) ;
}

Imej berikut yang kita lihat menunjukkan penyusunan dan pelaksanaan kod ini:

Untuk melihat kesan isyarat dalam proses ini, kami menyusun kod ini dan menjalankannya. Kemudian, dari terminal kedua, kami menghantar isyarat dengan sintaks berikut:

bunuh - n isyarat PID

Imej berikut yang kita lihat menunjukkan pelaksanaan kod dalam konsol sebelumnya dan kesan kedatangan isyarat yang dihantar dari konsol berikut. Seperti yang anda lihat, isyarat telah menyekat kesan fungsi sleep() dengan membangkitkan proses:

Kesimpulan

Dalam artikel Linuxhint ini, kami menunjukkan kepada anda cara menggunakan fungsi sleep() untuk meletakkan proses untuk tidur selama beberapa saat tertentu. Kami juga menunjukkan kepada anda sintaks serta penerangan fungsi dan kaedah panggilan.

Menggunakan contoh praktikal, coretan kod dan gambar, kami menunjukkan kepada anda cara untuk meletakkan proses tidur dan perkara yang mempengaruhi ketibaan isyarat pada proses tidur menggunakan fungsi sleep().