【问题标题】:usleep() function does not allow a loop to continueusleep() 函数不允许循环继续
【发布时间】:2010-02-13 22:25:40
【问题描述】:
#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 但它是一样的 如何解决?为什么会这样?

【问题讨论】:

  • 另外,如果您希望程序持续 10 秒,那么您不应该只添加多个睡眠并添加它们,因为 wach 循环需要时间来执行 printf 和开销。

标签: c++ sleep


【解决方案1】:

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

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

或者试试这个:

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

另外,如果您想移除行缓冲行为,您可以使用setvbuf()_IONBUF 模式。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多