除了在现代POSIX环境中使用外,我还可以使用什么?

Rob*_* P. 4 c posix c99

我是C的新手,但写了一个小的多线程应用程序.我想对线程引入延迟.我一直在使用'usleep'并且行为是我想要的 - 但它会在C99中产生警告.

函数'usleep'的隐式声明

这只是一个警告,但它困扰我.我用谷歌搜索了一个答案,但我能找到的只是一个while循环/计时器方法,看起来像CPU密集型.

编辑:

我的包括:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <time.h>
Run Code Online (Sandbox Code Playgroud)

我正在调用编译器:

c99 program.c -Wall -pedantic -W -lpthread
Run Code Online (Sandbox Code Playgroud)

编辑#2:

我创建了一个包含以下内容的新文件:

#include <unistd.h>

int main(void) {
    usleep(10);
}
Run Code Online (Sandbox Code Playgroud)

我仍然得到警告.

编辑#3:正如所建议的,我已经更新了问题的文本.

Qua*_*dom 5

问题是您使用的是标准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);
}
Run Code Online (Sandbox Code Playgroud)

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

c99 main.c -D _POSIX_C_SOURCE=200809L
Run Code Online (Sandbox Code Playgroud)

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

另外-Wall,-pedantic和-W的选项没有为POSIX c99命令定义,那些看起来更像是gcc命令给我(如果它们在你的系统上运行那么那很好,只要知道它们不能移植到其他POSIX)系统).