हां - पुराने POSIX मानकों को परिभाषित किया गया है usleep()
, इसलिए यह लिनक्स पर उपलब्ध है:
int usleep(useconds_t usec);
विवरण
Usleep () फ़ंक्शन कॉलिंग थ्रेड के निष्पादन को कम से कम usec micececonds के लिए निलंबित करता है। नींद को किसी भी प्रणाली की गतिविधि से या कॉल को संसाधित करने में या सिस्टम टाइमर की ग्रैन्युलैरिटी द्वारा थोड़ा बढ़ाया जा सकता है।
usleep()
माइक्रोसेकंड लेता है , इसलिए आपको मिलीसेकंड में सोने के लिए इनपुट को 1000 से गुणा करना होगा।
usleep()
तब से हटा दिया गया है और बाद में POSIX से हटा दिया गया है; नए कोड के nanosleep()
लिए पसंद किया जाता है:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
विवरण
nanosleep()
कॉलिंग थ्रेड के निष्पादन को तब तक के लिए स्थगित कर देता है जब तक कि कम से कम निर्दिष्ट समय *req
बीत चुका हो, या सिग्नल की डिलीवरी जो कॉलिंग थ्रेड में एक हैंडलर के आह्वान को ट्रिगर करता है या जो प्रक्रिया को समाप्त करता है।
संरचना टाइमस्पेस का उपयोग नैनोसेकंड परिशुद्धता के साथ समय के अंतराल को निर्दिष्ट करने के लिए किया जाता है। इसे निम्नानुसार परिभाषित किया गया है:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
एक उदाहरण msleep()
फ़ंक्शन का उपयोग करके कार्यान्वित किया जाता है nanosleep()
, यदि एक सिग्नल द्वारा बाधित होने पर नींद जारी रहती है:
#include <time.h>
#include <errno.h>
/* msleep(): Sleep for the requested number of milliseconds. */
int msleep(long msec)
{
struct timespec ts;
int res;
if (msec < 0)
{
errno = EINVAL;
return -1;
}
ts.tv_sec = msec / 1000;
ts.tv_nsec = (msec % 1000) * 1000000;
do {
res = nanosleep(&ts, &ts);
} while (res && errno == EINTR);
return res;
}
sleep(/*seconds*/)
में<unistd.h>
काम करता है, लेकिन अगर मैं के साथ उपयोगprintf("some things")
के बिना\n
, अपने नहीं काम करता है।