सी भाषा में स्लीप() फ़ंक्शन

Si Bhasa Mem Slipa Fanksana



जब हम ऐसे प्रोग्राम विकसित करते हैं जिनके लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है, तो ऐसे मामले होते हैं जहां सिस्टम समय को समायोजित करना आवश्यक होता है ताकि एप्लिकेशन पढ़ने योग्य और उपयोग में आसान हो।

उदाहरण के लिए, यदि हम एक कंसोल एप्लिकेशन विकसित कर रहे हैं जहां हमें उपयोगकर्ता को उन कार्यों के बारे में सूचित करने की आवश्यकता है जिन्हें अनुक्रम में निष्पादित किया जाएगा, तो सूचना संदेश उचित समय तक जारी रहना चाहिए ताकि उपयोगकर्ता के पास साफ़ होने से पहले उन्हें पढ़ने का समय हो और प्रोग्राम अगले कमांड पर चला जाता है।

इस लिनक्सहिंट लेख में, आप सीखेंगे कि वास्तविक समय में देरी पैदा करने के लिए स्लीप() फ़ंक्शन का उपयोग कैसे करें। हम आपको इस फ़ंक्शन का सिंटैक्स और विवरण दिखाएंगे, साथ ही वे विकल्प भी दिखाएंगे जो POSIX एक सेकंड से भी कम समय के अंतराल के साथ देरी पैदा करने के लिए प्रदान करता है। फिर, व्यावहारिक उदाहरणों, कोड और चित्रों का उपयोग करके, हम आपको दिखाएंगे कि किसी प्रोग्राम के निष्पादन में देरी कैसे करें और इस फ़ंक्शन पर संकेतों का प्रभाव कैसे पड़ता है।








सी भाषा में स्लीप() फ़ंक्शन का सिंटैक्स



अहस्ताक्षरित int यहाँ नींद ( अहस्ताक्षरित int यहाँ सेकंड )

सी भाषा में स्लीप() फ़ंक्शन का विवरण

स्लीप () फ़ंक्शन प्रक्रिया या थ्रेड को सेकंड में उस समय के लिए स्लीप में रखता है जो 'सेकंड' इनपुट तर्क में निर्दिष्ट है जो एक अहस्ताक्षरित पूर्णांक है। एक बार स्लीप() फ़ंक्शन को कॉल करने के बाद, कॉलिंग प्रक्रिया समय समाप्त होने या सिग्नल प्राप्त होने तक सोती रहती है।



इस फ़ंक्शन का उपयोग अक्सर वास्तविक समय प्रक्रियाओं के निष्पादन में 1 सेकंड से अधिक की लंबी देरी को लागू करने के लिए किया जाता है। 1 सेकंड से कम की देरी के लिए, POSIX माइक्रोसेकंड रिज़ॉल्यूशन फ़ंक्शन, usleep() प्रदान करता है, जो स्लीप() के समान विधि कॉल का उपयोग करता है। 1 माइक्रोसेकंड से कम की देरी के लिए, 1 नैनोसेकंड के रिज़ॉल्यूशन वाला नैनोस्लीप () फ़ंक्शन भी है, लेकिन एक अलग कॉल विधि के साथ जहां यह देरी का समय निर्धारित करने के लिए इनपुट तर्क के रूप में 'टाइमस्पेक' संरचनाओं का उपयोग करता है।





यदि स्लीप() फ़ंक्शन ने सभी निर्दिष्ट समय का उपभोग कर लिया है, तो यह परिणाम के रूप में 0 लौटाता है। यदि निर्दिष्ट समय बीतने से पहले सिग्नल के आने से निष्पादन बाधित हो जाता है, तो यह उस समय तक शेष सेकंड की संख्या लौटा देता है।

स्लीप() फ़ंक्शन को 'unistd.h' हेडर में परिभाषित किया गया है। इसका उपयोग करने के लिए, हमें इस फ़ाइल को कोड में निम्नानुसार शामिल करना होगा:



#शामिल

स्लीप() फ़ंक्शन के साथ किसी प्रक्रिया में देरी का परिचय कैसे दें

इस उदाहरण में, हम एक टाइमर बनाते हैं जिसमें एक अनंत लूप होता है जिसमें हम कमांड कंसोल में 'बीता हुआ समय' संदेश प्रिंट करते हैं, जिसके बाद प्रक्रिया के बीते हुए सेकंड होते हैं। इनमें से प्रत्येक लूप स्लीप() फ़ंक्शन के कारण होने वाली देरी के कारण हर 2 सेकंड में दोहराया जाता है।

ऐसा करने के लिए, हम '.c' एक्सटेंशन के साथ एक खाली फ़ाइल लेते हैं और उसमें 'stdio.h' और 'unistd.h' हेडर जोड़ते हैं। फिर, हम एक खाली मुख्य() फ़ंक्शन खोलते हैं और इसमें int प्रकार के वेरिएबल सेकंड को परिभाषित करते हैं जिसे हम बीते हुए समय के लिए काउंटर के रूप में उपयोग करेंगे।

एक बार जब हेडर डाले जाते हैं और वेरिएबल घोषित हो जाता है, तो हम एक अनंत लूप खोलते हैं और संदेश और समय मान प्रदर्शित करने के लिए उसमें printf() फ़ंक्शन का उपयोग करते हैं। अगली पंक्ति में, हम समय चर को 2 से बढ़ाते हैं और फिर इनपुट तर्क के रूप में 2 के मान के साथ स्लीप() फ़ंक्शन को कॉल करते हैं। इस प्रकार, यह चक्र हर सेकंड दोहराया जाता है और हमें एक काउंटर मिलता है जो स्क्रीन पर बीता हुआ समय प्रदर्शित करता है। अब, आइए इस एप्लिकेशन के कोड पर एक नज़र डालें। आइए इस उदाहरण के लिए पूरा कोड देखें:

#शामिल
#शामिल

खालीपन मुख्य ( )
{
int यहाँ सेकंड = 0 ;
जबकि ( 1 )
{
printf ( 'बीता हुआ समय: %i \एन ' , सेकंड ) ;
सेकंड += 2 ;
नींद ( 2 ) ;
}

}

निम्नलिखित में, हम इस कोड के संकलन और निष्पादन के साथ एक तस्वीर देखेंगे। जैसा कि हम देख सकते हैं, हर 2 सेकंड में, प्रोग्राम प्रक्रिया के निष्पादन के बाद से बीते हुए सेकंड को स्क्रीन पर प्रिंट करता है।

स्लीप() फ़ंक्शन पर सिग्नल का प्रभाव

इस उदाहरण में, हम उस प्रक्रिया पर संकेतों के प्रभाव का निरीक्षण करना चाहते हैं जिसे स्लीप() फ़ंक्शन का उपयोग करके सुप्त किया जाता है। ऐसा करने के लिए, हम एक सरल एप्लिकेशन बनाते हैं जिसमें एक मुख्य() फ़ंक्शन और सिग्नल 36 के लिए एक हैंडलर होता है।

मुख्य() फ़ंक्शन की पहली पंक्ति में, हम int प्रकार के शेष चर की घोषणा करते हैं जहां हम स्लीप() फ़ंक्शन द्वारा लौटाए गए मान को संग्रहीत करते हैं। फिर, हम हैंडलर को सिग्नल 36 से बांधने के लिए सिग्नल() फ़ंक्शन का उपयोग करते हैं। अगली पंक्ति में, हम प्रक्रिया की पीआईडी ​​प्रदर्शित करते हैं जिसका उपयोग हम दूसरे शेल से प्रक्रिया में सिग्नल भेजने के लिए करते हैं। अंत में, हम स्लीप() फ़ंक्शन को कॉल करते हैं और इसके इनपुट तर्क को 60 सेकंड पर सेट करते हैं, जो दूसरे शेल से सिग्नल भेजने के लिए पर्याप्त है। हम शेष वेरिएबल को आउटपुट तर्क के रूप में स्लीप() पर भेजते हैं।

सिग्नल 36 से जुड़े हैंडलर में कोड की एक पंक्ति होती है जहां प्रिंटफ () फ़ंक्शन 'शेष समय:' संदेश को प्रिंट करता है, जिसके बाद प्रक्रिया में सिग्नल आने पर स्लीप () द्वारा लौटाया गया मान होता है। यहां, आइए इस उदाहरण के लिए कोड देखें।

#शामिल
#शामिल
#शामिल करें
#शामिल

खालीपन हैंडलर ( int यहाँ शेष ) ;

खालीपन मुख्य ( )
{
int यहाँ शेष ;
संकेत ( 36 , हैंडलर ) ;
printf ( 'प्रक्रिया आईडी: %i \एन ' , getpid ( ) ) ;
शेष = नींद ( 60 ) ;
}

खालीपन हैंडलर ( int यहाँ शेष )

{
printf ( 'शेष समय: %i \एन ' , शेष ) ;
}

निम्नलिखित छवि जो हम देखते हैं वह इस कोड के संकलन और निष्पादन को दिखाती है:

इस प्रक्रिया में संकेतों के प्रभाव को देखने के लिए, हम इस कोड को संकलित करते हैं और इसे चलाते हैं। फिर, दूसरे टर्मिनल से, हम निम्नलिखित सिंटैक्स के साथ एक सिग्नल भेजते हैं:

मारना - एन सिग्नल पीआईडी

निम्नलिखित छवि जो हम देखते हैं वह पिछले कंसोल में कोड के निष्पादन और निम्नलिखित कंसोल से भेजे गए सिग्नल के आगमन के प्रभावों को दिखाती है। जैसा कि आप देख सकते हैं, सिग्नल ने प्रक्रिया को जागृत करके स्लीप() फ़ंक्शन के प्रभाव को दबा दिया है:

निष्कर्ष

इस लिनक्सहिंट आलेख में, हमने आपको दिखाया कि किसी प्रक्रिया को निर्दिष्ट सेकंड के लिए स्लीप में रखने के लिए स्लीप() फ़ंक्शन का उपयोग कैसे करें। हमने आपको सिंटैक्स के साथ-साथ फ़ंक्शन का विवरण और कॉलिंग विधि भी दिखाई।

व्यावहारिक उदाहरणों, कोड स्निपेट्स और चित्रों का उपयोग करके, हमने आपको स्लीप() फ़ंक्शन का उपयोग करके दिखाया कि किसी प्रक्रिया को स्लीप में कैसे रखा जाए और सिग्नल के आगमन का स्लीप प्रक्रिया पर क्या प्रभाव पड़ता है।