C11中的sleep函数

8

我希望在C11程序中睡眠。无论是在gcc(4.8.2)还是clang(3.2)的-std=c11选项下,都没有声明unistd.h中的usleeptime.h中的nanosleep

grep sleep /usr/include/*.h命令没有显示任何其他可能的睡眠函数。

我需要具有至少毫秒精度的睡眠功能。

如何在C11中进行睡眠?

3个回答

6
请使用-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");
}

3

如果我有一个threads.h就太好了。clang和gcc都定义了__STDC_NO_THREADS__,而我所拥有的唯一的threads.h是Linux内核头文件中的一个,显然不是正确的。 - cdjc

2
<windows.h>中有一个Sleep函数,在<unistd.h>中有一个usleep函数。Sleep函数以毫秒为单位,而usleep函数以微秒为单位。

1
usleep 接受微秒为单位的时间 ("u" = "µ")。感谢您在这个老问题中提供了明智的答案。 - Potatoswatter
1
这对于 MS Windows 来说很好。但我没有在 Windows 上编译。我在 /usr/include/ 中进行 grep 的事实可能已经暴露了这一点。 - cdjc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接