C زبان میں Sleep() فنکشن

C Zban My Sleep Fnkshn



جب ہم ایسے پروگرام تیار کرتے ہیں جن کے لیے صارف کی بات چیت کی ضرورت ہوتی ہے، تو ایسے معاملات ہوتے ہیں جہاں سسٹم کے اوقات کو ایڈجسٹ کرنا ضروری ہوتا ہے تاکہ ایپلیکیشن پڑھنے کے قابل اور استعمال میں آسان ہو۔

مثال کے طور پر، اگر ہم ایک کنسول ایپلی کیشن تیار کر رہے ہیں جہاں ہمیں صارف کو ان کاموں کے بارے میں مطلع کرنے کی ضرورت ہے جو ترتیب کے ساتھ انجام دیے جائیں گے، تو معلوماتی پیغامات کو مناسب وقت تک برقرار رہنا چاہیے تاکہ صارف کے پاس صاف ہونے سے پہلے انہیں پڑھنے کا وقت ہو اور پروگرام اگلی کمانڈ پر جاتا ہے۔

اس Linuxhint آرٹیکل میں، آپ سیکھیں گے کہ حقیقی وقت میں تاخیر پیدا کرنے کے لیے sleep() فنکشن کا استعمال کیسے کریں۔ ہم آپ کو اس فنکشن کا نحو اور تفصیل دکھائیں گے، ساتھ ہی وہ اختیارات جو POSIX ایک سیکنڈ سے کم کے حصوں میں تاخیر پیدا کرنے کے لیے فراہم کرتا ہے۔ پھر، عملی مثالوں، کوڈز، اور تصویروں کا استعمال کرتے ہوئے، ہم آپ کو دکھائیں گے کہ کس طرح کسی پروگرام کے عمل میں تاخیر اور اس فنکشن پر سگنلز کے اثرات۔








C زبان میں Sleep() فنکشن کا نحو



غیر دستخط شدہ int سونا ( غیر دستخط شدہ int سیکنڈ )

C زبان میں Sleep() فنکشن کی تفصیل

sleep() فنکشن عمل یا دھاگے کو سیکنڈوں میں وقت کے لیے سلیپ کرنے کے لیے رکھتا ہے جو کہ 'سیکنڈ' ان پٹ آرگیومینٹ میں بیان کیا گیا ہے جو کہ ایک غیر دستخط شدہ عدد ہے۔ ایک بار sleep() فنکشن کو کال کرنے کے بعد، کال کرنے کا عمل اس وقت تک سوتا ہے جب تک کہ اس کا وقت ختم نہ ہو جائے یا سگنل موصول نہ ہو جائے۔



یہ فنکشن اکثر حقیقی وقت کے عمل کے عمل میں 1 سیکنڈ سے زیادہ کی طویل تاخیر کو نافذ کرنے کے لیے استعمال ہوتا ہے۔ 1 سیکنڈ سے کم کی تاخیر کے لیے، POSIX مائیکرو سیکنڈ ریزولیوشن فنکشن فراہم کرتا ہے، usleep()، جو اسی طریقہ کال کا استعمال کرتا ہے جیسے sleep()۔ 1 مائیکرو سیکنڈ سے کم کی تاخیر کے لیے، 1 نینو سیکنڈ کی ریزولوشن کے ساتھ nanosleep() فنکشن بھی ہے، لیکن ایک مختلف کال طریقہ کے ساتھ جہاں یہ تاخیر کا وقت سیٹ کرنے کے لیے 'timespec' ڈھانچے کو ان پٹ دلیل کے طور پر استعمال کرتا ہے۔





اگر sleep() فنکشن نے تمام مخصوص وقت استعمال کر لیا ہے، تو یہ نتیجہ کے طور پر 0 لوٹاتا ہے۔ اگر مقررہ وقت گزرنے سے پہلے کسی سگنل کے آنے سے عمل میں خلل پڑتا ہے، تو یہ اس وقت تک باقی سیکنڈوں کو لوٹاتا ہے۔

نیند () فنکشن کی وضاحت 'unistd.h' ہیڈر میں کی گئی ہے۔ اسے استعمال کرنے کے لیے، ہمیں اس فائل کو درج ذیل کوڈ میں شامل کرنا ہوگا۔



#include

Sleep() فنکشن کے ساتھ کسی عمل میں تاخیر کو کیسے متعارف کرایا جائے۔

اس مثال میں، ہم ایک ٹائمر بناتے ہیں جو کہ ایک لامحدود لوپ پر مشتمل ہوتا ہے جس میں ہم کمانڈ کنسول میں 'گذرا ہوا وقت' پیغام پرنٹ کرتے ہیں، اس کے بعد عمل کے گزرے ہوئے سیکنڈز۔ ان میں سے ہر ایک لوپ کو ہر 2 سیکنڈ میں دہرایا جاتا ہے اس تاخیر کی وجہ سے جو sleep() فنکشن کی وجہ سے ہوتی ہے۔

ایسا کرنے کے لیے، ہم '.c' ایکسٹینشن کے ساتھ ایک خالی فائل لیتے ہیں اور اس میں 'stdio.h' اور 'unistd.h' ہیڈر شامل کرتے ہیں۔ اس کے بعد، ہم ایک خالی main() فنکشن کھولتے ہیں اور اس میں قسم int کے متغیر سیکنڈ کی وضاحت کرتے ہیں جسے ہم گزرے ہوئے وقت کے لیے کاؤنٹر کے طور پر استعمال کریں گے۔

ایک بار جب ہیڈر داخل ہو جاتے ہیں اور متغیر کا اعلان ہو جاتا ہے، ہم ایک لامحدود لوپ کھولتے ہیں اور پیغام اور وقت کی قدر کو ظاہر کرنے کے لیے اس میں printf() فنکشن کا استعمال کرتے ہیں۔ اگلی لائن پر، ہم ٹائم ویری ایبل کو 2 سے بڑھاتے ہیں اور پھر ان پٹ آرگیومینٹ کے طور پر 2 کی ویلیو کے ساتھ sleep() فنکشن کو کال کرتے ہیں۔ اس طرح یہ سائیکل ہر سیکنڈ میں دہرایا جاتا ہے اور ہمیں ایک کاؤنٹر ملتا ہے جو گزرے ہوئے وقت کو سکرین پر دکھاتا ہے۔ اب، آئیے اس ایپلیکیشن کے کوڈ پر ایک نظر ڈالتے ہیں۔ آئیے اس مثال کے لیے مکمل کوڈ دیکھیں:

# شامل کریں
#include

باطل مرکزی ( )
{
int سیکنڈ = 0 ;
جبکہ ( 1 )
{
printf ( گزرا ہوا وقت: %i \n ' , سیکنڈ ) ;
سیکنڈ += 2 ;
سونا ( 2 ) ;
}

}

ذیل میں، ہم اس کوڈ کی تالیف اور اس پر عمل درآمد کے ساتھ ایک تصویر دیکھیں گے۔ جیسا کہ ہم دیکھ سکتے ہیں، ہر 2 سیکنڈ میں، پروگرام اس عمل کے مکمل ہونے کے بعد سے گزرے ہوئے سیکنڈز کو اسکرین پر پرنٹ کرتا ہے۔

Sleep() فنکشن پر سگنلز کا اثر

اس مثال میں، ہم اس عمل پر سگنلز کے اثر کا مشاہدہ کرنا چاہتے ہیں جو sleep() فنکشن کا استعمال کرتے ہوئے نیند میں ڈال دیا جاتا ہے۔ ایسا کرنے کے لیے، ہم ایک سادہ ایپلیکیشن بناتے ہیں جس میں مین() فنکشن اور سگنل 36 کے لیے ایک ہینڈلر ہوتا ہے۔

مین () فنکشن کی پہلی لائن میں، ہم قسم int کے باقی متغیر کا اعلان کرتے ہیں جہاں ہم اس ویلیو کو اسٹور کرتے ہیں جو sleep() فنکشن کے ذریعے واپس آتی ہے۔ اس کے بعد، ہم ہینڈلر کو سگنل 36 سے باندھنے کے لیے سگنل() فنکشن کا استعمال کرتے ہیں۔ اگلی لائن پر، ہم اس عمل کی PID ظاہر کرتے ہیں جسے ہم دوسرے شیل سے پروسیس میں سگنل بھیجنے کے لیے استعمال کرتے ہیں۔ آخر میں، ہم sleep() فنکشن کو کال کرتے ہیں اور اس کے ان پٹ آرگومنٹ کو 60 سیکنڈ پر سیٹ کرتے ہیں، جو کہ دوسرے شیل سے سگنل بھیجنے کے لیے کافی ہوتا ہے۔ ہم باقی متغیر کو آؤٹ پٹ دلیل کے طور پر sleep() پر بھیجتے ہیں۔

سگنل 36 کے ساتھ منسلک ہینڈلر کوڈ کی ایک لائن پر مشتمل ہوتا ہے جہاں printf() فنکشن 'بقیہ وقت:' پیغام کو پرنٹ کرتا ہے جس کے بعد وہ قدر ہوتی ہے جو سگنل کے عمل میں آنے کے وقت sleep() کے ذریعے واپس آتی ہے۔ یہاں، آئیے اس مثال کے کوڈ کو دیکھیں۔

# شامل کریں
#include
# شامل کریں
#include

باطل ہینڈلر ( int باقی ) ;

باطل مرکزی ( )
{
int باقی ;
سگنل ( 36 , ہینڈلر ) ;
printf ( 'پروسیس ID: %i \n ' , getpid ( ) ) ;
باقی = سونا ( 60 ) ;
}

باطل ہینڈلر ( int باقی )

{
printf ( 'بقیہ وقت: %i \n ' , باقی ) ;
}

درج ذیل تصویر جو ہم دیکھتے ہیں اس کوڈ کی تالیف اور اس پر عمل درآمد کو ظاہر کرتی ہے۔

اس عمل میں سگنلز کا اثر دیکھنے کے لیے، ہم اس کوڈ کو مرتب کرتے ہیں اور اسے چلاتے ہیں۔ پھر، دوسرے ٹرمینل سے، ہم درج ذیل نحو کے ساتھ ایک سگنل بھیجتے ہیں:

مار ڈالو - n سگنل PID

مندرجہ ذیل تصویر جو ہم دیکھ رہے ہیں وہ پچھلے کنسول میں کوڈ کے نفاذ اور مندرجہ ذیل کنسول سے بھیجے گئے سگنل کی آمد کے اثرات کو ظاہر کرتی ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، سگنل نے عمل کو بیدار کرکے sleep() فنکشن کے اثر کو دبا دیا ہے:

نتیجہ

لینکس ہنٹ کے اس آرٹیکل میں، ہم نے آپ کو دکھایا ہے کہ سلیپ() فنکشن کو کس طرح استعمال کیا جاتا ہے تاکہ کسی عمل کو ایک مخصوص سیکنڈ کے لیے سلیپ کیا جائے۔ ہم نے آپ کو نحو کے ساتھ ساتھ فنکشن کی تفصیل اور کال کرنے کا طریقہ بھی دکھایا۔

عملی مثالوں، کوڈ کے ٹکڑوں اور تصویروں کا استعمال کرتے ہوئے، ہم نے آپ کو دکھایا کہ کسی عمل کو نیند میں کیسے ڈالا جائے اور نیند () فنکشن کا استعمال کرتے ہوئے سگنل کے آنے سے نیند کے عمل پر کیا اثر پڑتا ہے۔