我想睡在C11程序中。 usleep(在unistd.h中)和nanosleep(在time.h中)都没有使用gcc(4.8.2)和clang(3.2)的-std=c11
选项声明。
grep sleep /usr/include/*.h
没有透露任何其他可能的睡眠候选人。
我需要一个至少毫秒精度的睡眠。
我如何在C11睡觉?
答案 0 :(得分:5)
使用-std=gnu11
代替-std=c11
(这适用于clang和gcc)。这将导致<time.h>
标头定义nanosleep
。
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");
}
答案 1 :(得分:2)
<windows.h>
睡眠功能和<unistd.h>
usleep 功能
他们俩都获得了unsigned int
mili-seconds。
答案 2 :(得分:1)
在threads.h标题中有thrd_sleep函数
int thrd_sleep( const struct timespec* time_point, struct timespec* remaining )