2014-04-07 12 views
5

Tôi muốn ngủ trong chương trình C11. Cả hai không ngủ (trong unistd.h) cũng không phải nanosleep (trong time.h) được khai báo với tùy chọn -std=c11 của cả gcc (4.8.2) và clang (3.2).chức năng ngủ ở C11

A grep sleep /usr/include/*.h không tiết lộ bất kỳ ứng cử viên ngủ tiềm năng nào khác.

Tôi cần một giấc ngủ có độ chính xác tối thiểu là mili giây.

Làm cách nào để ngủ trong C11?

Trả lời

4

Sử dụng -std=gnu11 thay vì -std=c11 (chỉ hoạt động này cho cả kêu vang và gcc). Điều này sẽ gây ra tiêu đề <time.h> để xác định nanosleep.

Một thay thế cho nanosleep, gọi pselect trên một mô tả tập tin null với một thời gian chờ, cũng chỉ làm việc với -std=gnu11 và không -std=c11

Đối với một ví dụ về cả hai:

#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

Trong header threads.h có chức năng thrd_sleep

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

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

+0

Điều đó sẽ tuyệt vời nếu tôi * có * một chuỗi.h. Cả hai clang và gcc định nghĩa '__STDC_NO_THREADS__', và chỉ có chủ đề. Tôi có là một tiêu đề hạt nhân Linux, mà chắc chắn không phải là một trong những quyền. – cdjc

2

Có trong <windows.h> một Chức năng Sleep và trong <unistd.h> an usleep chức năng

cả hai đều nhận được unsigned int là mili giây.

+1

'usleep' mất micro giây (" u "=" µ "). Cảm ơn bạn đã thêm câu trả lời hợp lý cho câu hỏi cũ này. – Potatoswatter

+0

viết, xin lỗi. Giấc ngủ mất miliseconds và ngủ mất micro giây. –

+0

Thật tuyệt vời cho MS Windows. Nhưng tôi không biên dịch trên Windows. Thực tế là tôi đã grepping thông qua '/ usr/include /' có thể cho nó đi. – cdjc

Các vấn đề liên quan