c - 在现代 POSIX 环境中除了 usleep 还能用什么?

标签 c posix c99

我是 C 语言的新手,但正在编写一个小型多线程应用程序。我想给线程引入延迟。我一直在使用“usleep”并且行为是我想要的 - 但它会在 C99 中生成警告。

implicit declaration of function ‘usleep’

这只是一个警告,但它困扰着我。我用谷歌搜索了一个答案,但我能找到的只是一个 while-loop/timer 方法,这似乎是 CPU 密集型的。

编辑:

我的包括:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <time.h>

我正在调用编译器:

c99 program.c -Wall -pedantic -W -lpthread

编辑#2:

我创建了一个新文件,其中包含:

#include <unistd.h>

int main(void) {
    usleep(10);
}

而且我仍然收到警告。

编辑#3: 按照建议,我已经更新了问题的文本。

最佳答案

问题是您使用的是标准 C99 编译器,但您正在尝试访问 POSIX 扩展。要公开 POSIX 扩展,您应该将 _POSIX_C_SOURCE 定义为 200809L(对于当前标准)。例如这个程序:

#include <time.h>

int main(void) {
        struct timespec reqtime;
        reqtime.tv_sec = 1;
        reqtime.tv_nsec = 500000000;
        nanosleep(&reqtime, NULL);
}

将正确编译并等待 1.5 秒(1 秒 + 500000000 纳秒),使用以下编译命令:

c99 main.c -D _POSIX_C_SOURCE=200809L

必须使用适当的值定义 _POSIX_C_SOURCE 宏,POSIX 扩展才可用。

此外,选项 -Wall、-pedantic 和 -W 没有为 POSIX c99 命令定义,这些对我来说看起来更像是 gcc 命令(如果它们在您的系统上工作那么没关系,请注意它们不可移植到其他 POSIX 系统)。

关于c - 在现代 POSIX 环境中除了 usleep 还能用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546252/

相关文章:

c - 尝试使用 fscanf 时出现段错误

c++ - 出现无法分配内存错误

c - POSIX信号量:同步问题

c - Kill() 错误 : no such process?

c++ - 在 Linux/C++ 中,发送到线程/进程的信号是否使其变为事件状态?

c - 在C中初始化未知大小的数组

c - 执行 : how can I initialise char *argv[ ] with multiple commands instead of a single command?

C99:使用不同数量的参数转换回调

C 最小值/最大值函数

c - 函数隐式声明 'execle' 错误