C睡眠功能不起作用

Jam*_*son 7 c sleep unistd.h

unistd.h程序中包含睡眠功能时无限期挂起:

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i;
        printf("0 ");
        for(i = 1; i <20; ++i)
        {
            sleep(2);
            printf("%d ", i);
        }
        printf("\n");

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

sleep(2)评论出来时,其余的都运行良好,任何想法?

Tam*_*más 10

代码没有任何问题,但请注意,在许多情况下,输出printf是缓冲的,这意味着只有在显式调用fflush(stdout),打印换行符或缓冲区变满时,输出才会显示在控制台上.由于直到最后才打印换行符,因此在for循环中看不到任何内容,持续40秒(因为printf打印的内容仍然在缓冲区中).然后,当执行命中时printf("\n"),在刷新缓冲区时将立即打印所有内容.

因此,最重要的是:在调用fflush(stdout)之前调用sleep以确保没有任何东西停留在输出缓冲区中,或者等待40秒,最后您将在一个批处理中获得输出.


Mik*_*ike 5

hangs indefinitely意味着它被卡住或不确定,而这不会发生。您的代码运行良好,在 38 秒 (19 * 2) 后,它会转储从 0 到 19 计数的字符串。但是我怀疑这就是您要执行的操作:

int main()
{
        int i;
        printf("0 ");
        fflush(stdout);  // Force the output to be printed
        for(i = 1; i <20; ++i)
        {
            sleep(2);
            printf("%d ", i);
            fflush(stdout); // Force the output to be printed
        }
        printf("\n");

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

stdout流缓冲,只会显示当它击中一个换行符'\n',或者如果你想观看“实时”作为您的来电printf(),你需要迫使它刷新缓冲区,这样或那样的。调用fflush(stdout)将执行此操作。