usleep()函数不允许循环继续

时间:2010-02-13 22:25:40

标签: c++ sleep

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

int main(void)
{
        int i=0;
        while(i<10)
        {
                printf("%d", i);
                usleep(10000); // or sleep(1)
                i++;
        }
        return 0;
}

我希望程序持续10秒,即打印1 - 等待1秒 - 打印2 - 等待1秒,依此类推,直到结束。但它没有这样做 - 它只是等待所有的时间(10秒),然后打印整个数字阵列,没有任何时间延迟,它只是立即打印0123456789。 编辑:我尝试使用sleep()而不是usleep,但它是一样的 怎么解决?为什么会这样?

3 个答案:

答案 0 :(得分:13)

您的输出缓冲区未被刷新。默认情况下,当流中出现新行时会写入输出。将您的printf更改为此:

printf("%d\n", i);

或试试这个:

printf("%d", i);
fflush(stdout);

此外,如果您要删除行缓冲行为,可以使用setvbuf()_IONBUF模式。

答案 1 :(得分:5)

除此之外 - 要将{1}传递给usleep,请致电usleep(1000000)

答案 2 :(得分:2)

在每个printf之后调用fflush(stdout)来刷新缓冲的输出