繁体   English   中英

我在ubuntu中使用sleep函数,但是printf函数在while循环中运行非常缓慢。 为什么?

[英]I use sleep function in ubuntu ,but printf function run very slowly in while loop. why?

我将ubuntu 14.04版本系统用于以下代码。 我使用下面的代码:(下面的代码是无限循环)

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

int flag=0;

int main(void){

    printf("program start.\n");   
    printf("PID=%d\n",getpid());    
    printf("flag=%d\n",flag);
    //-----------I feel weired below do...while... sentences----------//
    do{
        printf("loop_");
        sleep(1);
       }while(flag==0);

    printf("program exit.\n");    
    return 0;
}

在下面的开始打印结果中:

root@ubuntu:~/Desktop/my_test_code# ./issue 
program start.
PID=3113
flag=0
...........//start waiting here,and don't print "loop_"

然后,我等待了很长时间后,该程序打印了很多“ loop_”。 我觉得这很奇怪,应该打印一个字符串“ loop_”,然后,等待一秒钟,然后再次打印一个“ loop_”,依此类推,为什么我等了很长时间,开始打印很多的“ loop_”?

有人对我的问题有任何想法。 先感谢您。

printf缓冲其输出(直到给定大小或\\n ),因此直到将其刷新后您才能看到输出。

改变你的循环

printf("loop_");
fflush(stdout);
sleep(1);

应该解决您的问题。

根本原因:

通常,stdout的缓冲区将被\\n刷新,因此此处的循环继续进行,并且stdout没有机会正确缓冲其数据。

解:

这里有三种方式

1)在printf末尾使用\\n

printf("loop_\n");

2)在循环执行printf之后,调用fflush(stdout):

3)在程序中使用以下调用禁用stdout流的缓冲

setvbuf(stdout, NULL, _IONBF, 0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM