פונקציית Sleep() בשפת C

Pwnqzyyt Sleep Bspt C



כאשר אנו מפתחים תוכנות הדורשות אינטראקציה של המשתמש, ישנם מקרים בהם יש צורך להתאים את זמני המערכת כך שהאפליקציה תהיה קריאה וקלה לשימוש.

לדוגמה, אם אנו מפתחים אפליקציית קונסולה שבה עלינו ליידע את המשתמש לגבי המשימות שיבוצעו ברצף, הודעות המידע צריכות להימשך זמן סביר, כך שלמשתמש יהיה זמן לקרוא אותן לפני שהן נמחקות. התוכנית עוברת לפקודה הבאה.

במאמר זה של Linuxhint, תלמד כיצד להשתמש בפונקציית sleep() כדי ליצור עיכובים בזמן אמת. אנו נראה לך את התחביר והתיאור של פונקציה זו, כמו גם את האפשרויות ש-POSIX מספק ליצירת עיכובים עם שברים של פחות משנייה. לאחר מכן, באמצעות דוגמאות מעשיות, קודים ותמונות, נראה לך כיצד לעכב את ביצוע התוכנית ואת ההשפעות של אותות על פונקציה זו.








תחביר של הפונקציה Sleep() בשפת C



לא חתום int לִישׁוֹן ( לא חתום int שניות )

תיאור הפונקציה Sleep() בשפת C

הפונקציה sleep() מכניסה את התהליך או השרשור למצב שינה למשך הזמן בשניות שצוין בארגומנט הקלט 'sec' שהוא מספר שלם ללא סימן. ברגע שהפונקציה sleep() נקראת, תהליך ההתקשרות ישן עד שהוא קצוב זמן קצוב או מקבל אות.



פונקציה זו משמשת לעתים קרובות כדי לאכוף עיכובים ארוכים של יותר משנייה אחת בביצוע תהליכים בזמן אמת. עבור עיכובים של פחות משנייה אחת, POSIX מספק את פונקציית הרזולוציה של מיקרו-שנייה, usleep(), המשתמשת באותה קריאת שיטה כמו sleep(). עבור ההשהיות של פחות מ-1 מיקרו-שנייה, יש גם את הפונקציה nanosleep() ברזולוציה של 1 ננו-שנייה, אבל עם שיטת קריאה אחרת שבה היא משתמשת במבני 'Timespec' כארגומנטים של קלט כדי להגדיר את זמן ההשהיה.





אם הפונקציה sleep() צרכה את כל הזמן שצוין, היא מחזירה 0 כתוצאה מכך. אם הביצוע מופרע על ידי הגעת אות לפני שחלף הזמן שצוין, הוא מחזיר את מספר השניות שנותר עד לשעה זו.

הפונקציה sleep() מוגדרת בכותרת 'unistd.h'. כדי להשתמש בו, עלינו לכלול את הקובץ הזה בקוד באופן הבא:



#include

כיצד להציג עיכובים בתהליך עם הפונקציה Sleep()

בדוגמה זו, אנו יוצרים טיימר המורכב מלולאה אינסופית בה נדפיס את הודעת 'זמן חלף' במסוף הפקודות, ולאחר מכן את השניות שחלפו של התהליך. כל אחת מהלולאות הללו חוזרת על עצמה כל 2 שניות עקב ההשהיה שנגרמה על ידי הפונקציה sleep() .

לשם כך, ניקח קובץ ריק עם הסיומת '.c' ונוסיף בו את הכותרות 'stdio.h' ו- 'unistd.h'. לאחר מכן, אנו פותחים פונקציית main() ריקה ומגדירים בה את המשתנה השניות מסוג int שבה נשתמש כמונה עבור הזמן שחלף.

לאחר הכנסת הכותרות והכרזה על המשתנה, אנו פותחים לולאה אינסופית ומשתמשים בפונקציה printf() בה כדי להציג את ההודעה ואת ערך הזמן. בשורה הבאה, אנו מגדילים את משתנה הזמן ב-2 ואז קוראים לפונקציה sleep() עם הערך של 2 כארגומנט הקלט. באופן זה, המחזור הזה חוזר על עצמו כל שנייה ונקבל מונה שמציג את הזמן שחלף על המסך. כעת, בואו נסתכל על הקוד של יישום זה. בוא נראה את הקוד המלא עבור הדוגמה הזו:

#include
#include

בָּטֵל רָאשִׁי ( )
{
int שניות = 0 ;
בזמן ( 1 )
{
printf ( 'זמן שחלף: %i \n ' , שניות ) ;
שניות += 2 ;
לִישׁוֹן ( 2 ) ;
}

}

בהמשך נראה תמונה עם הידור והביצוע של קוד זה. כפי שאנו יכולים לראות, כל 2 שניות, התוכנית מדפיסה את השניות שחלפו על המסך מאז ביצוע התהליך.

השפעת אותות על הפונקציה Sleep()

בדוגמה זו, אנו רוצים לראות את ההשפעה של אותות על תהליך שמורדם באמצעות הפונקציה sleep() . לשם כך, אנו יוצרים אפליקציה פשוטה המורכבת מפונקציה main() ומטפל לאות 36.

בשורה הראשונה של הפונקציה main() אנו מכריזים על המשתנה הנותר מסוג int שבו אנו מאחסנים את הערך המוחזר על ידי הפונקציה sleep(). לאחר מכן, אנו משתמשים בפונקציה signal() כדי לאגד את המטפל לאות 36. בשורה הבאה, אנו מציגים את ה-PID של התהליך בו אנו משתמשים לאחר מכן כדי לשלוח אות מקליפה שנייה לתהליך. לבסוף, אנו קוראים לפונקציה sleep() ומגדירים את ארגומנט הקלט שלה ל-60 שניות, מספיק זמן כדי לשלוח אות מקליפה שנייה. אנו שולחים את המשתנה הנותר כארגומנט הפלט ל-sleep().

המטפל שמחובר לאות 36 מורכב משורת קוד שבה הפונקציה printf() מדפיסה את הודעת 'Time resting:' ואחריה הערך המוחזר על ידי sleep() בזמן שהאות מגיע לתהליך. הנה, בואו נסתכל על הקוד עבור דוגמה זו.

#include
#include
#include
#include

בָּטֵל מטפל ( int נוֹתָר ) ;

בָּטֵל רָאשִׁי ( )
{
int נוֹתָר ;
אוֹת ( 36 , מטפל ) ;
printf ( 'זיהוי תהליך: %i \n ' , עצבני ( ) ) ;
נוֹתָר = לִישׁוֹן ( 60 ) ;
}

בָּטֵל מטפל ( int נוֹתָר )

{
printf ( 'הזמן שנותר: %i \n ' , נוֹתָר ) ;
}

התמונה הבאה שאנו רואים מציגה את ההידור והביצוע של קוד זה:

כדי לראות את ההשפעה של האותות בתהליך זה, אנו מקמפלים את הקוד הזה ומפעילים אותו. לאחר מכן, ממסוף שני, אנו שולחים אות עם התחביר הבא:

לַהֲרוֹג - n אות PID

התמונה הבאה שאנו רואים מציגה את ביצוע הקוד בקונסולה הקודמת ואת ההשפעות של הגעת אות שנשלח מהמסוף הבא. כפי שאתה יכול לראות, האות דיכא את ההשפעה של פונקציית sleep() על ידי הערת התהליך:

סיכום

במאמר זה של Linuxhint, הראינו לך כיצד להשתמש בפונקציה sleep() כדי להעביר תהליך למצב שינה למספר מוגדר של שניות. הראינו לך גם את התחביר וכן את תיאור הפונקציה ושיטת הקריאה.

בעזרת דוגמאות מעשיות, קטעי קוד ותמונות, הראינו לכם כיצד להרדים תהליך ומה משפיע על הגעת האות על תהליך שינה באמצעות הפונקציה sleep() .