2014-04-07 15 views
5

में नींद समारोह मैं एक सी 11 कार्यक्रम में सोना चाहता हूं। न तो सोएं (unistd.h में) न ही nanosleep (time.h में) -std=c11 दोनों जीसीसी (4.8.2) और क्लैंग (3.2) के विकल्प के साथ घोषित किया जाता है।सी 11

grep sleep /usr/include/*.h किसी अन्य संभावित नींद के उम्मीदवारों को प्रकट नहीं करता है।

मुझे कम से कम मिलीसेकंद परिशुद्धता के साथ नींद की आवश्यकता है।

मैं सी 11 में कैसे सो सकता हूं?

उत्तर

4

उपयोग -std=gnu11 बजाय -std=c11 (यह दोनों बजना और जीसीसी के लिए काम करता है) है। यह को परिभाषित करने के लिए <time.h> शीर्षलेख का कारण बन जाएगा।

nanosleep के लिए एक और विकल्प, एक समय समाप्ति के साथ एक अशक्त फ़ाइल वर्णनकर्ता पर pselect बुला, यह भी केवल दोनों का एक उदाहरण के लिए -std=gnu11 और नहीं -std=c11

साथ काम करता है:

#include <stdio.h> 
#include <sys/select.h> 

int main() // Compile with -std=gnu11 (and not -std=c11) 
{ 
    struct timespec ts1 = { 
     .tv_sec = 0, 
     .tv_nsec = 500*1000*1000 
    }; 
    printf("first\n"); 
    nanosleep(&ts1, NULL); 
    printf("second\n"); 
    pselect(0, NULL, NULL, NULL, &ts1, NULL); 
    printf("third\n"); 
} 
0

threads.h हैडर में thrd_sleep समारोह

int thrd_sleep(const struct timespec* time_point, struct timespec* remaining) 

http://en.cppreference.com/w/c/thread/thrd_sleep

+0

यह अच्छा होगा अगर मेरे पास * थ्रेड था। एच। क्लैंग और जीसीसी दोनों '__STDC_NO_THREADS__' को परिभाषित करते हैं, और केवल थ्रेड हैं। मेरे पास लिनक्स कर्नेल हेडर एक है, जो निश्चित रूप से सही नहीं है। – cdjc

2
वहाँ <windows.h> एक में

नींद फ़ंक्शन और <unistd.h> में नींद फ़ंक्शन

कि दोनों को मिलि-सेकेंड के रूप में unsigned int मिल रहा है।

+1

'usleep' microseconds ("u" = "μ") लेता है। इस पुराने प्रश्न के समझदार उत्तर को जोड़ने के लिए धन्यवाद। – Potatoswatter

+0

लिखें, क्षमा करें। सोएं मिलीसेकंड ले लो और सो जाओ माइक्रोसेकंड ले लो। –

+0

यह एमएस विंडोज के लिए बहुत अच्छा है। लेकिन मैं विंडोज़ पर संकलन नहीं कर रहा था। तथ्य यह है कि मैं '/ usr/include /' के माध्यम से grepping था शायद इसे दूर देता है। – cdjc