QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1901|回复: 26

关于sleep()的一个古怪问题,求助

[复制链接]
发表于 2005-4-20 18:40:47 | 显示全部楼层 |阅读模式
有下面一个简单程序:
main()
{
   int i;
   for(i=0;i<500;i++)
     {  
          printf("hello");
          sleep(1);
     }
}
编译后执行,终端上什么也不输出,只有光标闪动
而去掉sleep(),程序很快就输出完500个hello.怎么回事呀??
发表于 2005-4-20 22:25:57 | 显示全部楼层
因为输出保存到了缓存里,在 printf("hello"); 加上"\n",改为 printf("hello\n"); 就OK了!
回复

使用道具 举报

 楼主| 发表于 2005-4-21 11:54:14 | 显示全部楼层
谢谢!
不过为什么有sleep()就会保存在缓存里呢?
回复

使用道具 举报

发表于 2005-4-21 12:18:28 | 显示全部楼层
printf函数遇到\n就立即输出换存内容,但通常一次printf也会输出缓存,但是有一段等待时间,虽然我们看上去很快.sleep使程序在printf函数调用之后立即进入睡眠状态,printf无法在等待一段虽然短时间之后再输出缓存内容.
例如printf调用(不带\n)之后要等待0.004秒才自动输出缓存内容,但由于等待是异步进行的,而printf调用之后立即有sleep调用产生,导致printf无法等到0.004妙而是进入睡眠,以后也再自动延续这此未完成的等待,同时程序设中没有\n 输出,所以直到程序结束也没有输出.
再试验一下,把 sleep语句放到printf语句之前,那末所有 输出会在程序结束之前一次性输出(要把500改为5,这样可以减少等待时间的)的.
实验一下:--------------
#include <stdio.h>
#include <unistd.h>

main()
{
int i;
for(i=0;i<5;i++)
{
sleep(1);
printf("hello");
}
}
是不是很有意思.
回复

使用道具 举报

发表于 2005-4-21 12:24:58 | 显示全部楼层
我也是自己试验的,你自己也可以验证自己的想法,书上没有太多有用的东西,全考自己实践了!
有问题发我QQ:18938761或油箱[email protected]
回复

使用道具 举报

发表于 2005-4-21 14:05:57 | 显示全部楼层
楼上的是linuxer的榜样啊,就要这样学习. (不过好书还是不一样的)
回复

使用道具 举报

发表于 2005-4-21 21:16:52 | 显示全部楼层
我看的都是好书。。。。。
回复

使用道具 举报

发表于 2005-4-21 21:18:44 | 显示全部楼层
我对书的质量很挑剔的!!!
回复

使用道具 举报

发表于 2005-4-21 21:24:28 | 显示全部楼层
[quote:0582806766="zhangzhaoao"]我看的都是好书。。。。。[/quote]比如说 .........
回复

使用道具 举报

发表于 2005-4-21 22:23:12 | 显示全部楼层
<C++精髓  软件工程方法》It's the best book for C++ I think.
<Java2核心技术(卷一/卷二》
。。。。。。
回复

使用道具 举报

发表于 2005-4-21 22:25:45 | 显示全部楼层
这两套可是C++和JAVA里最权威的书了。。。
回复

使用道具 举报

 楼主| 发表于 2005-4-21 22:38:22 | 显示全部楼层
大师呀,滔滔江水
不过我觉得循环中哪句在前是一样的吧
回复

使用道具 举报

发表于 2005-4-21 23:03:48 | 显示全部楼层
[quote:d2eb7f18a9="zhangzhaoao"]<C++精髓  软件工程方法》It's the best book for C++ I think.
<Java2核心技术(卷一/卷二》
。。。。。。[/quote]这些书不错,看这些书都觉得没什么有用的东西?
回复

使用道具 举报

发表于 2005-4-21 23:04:59 | 显示全部楼层
[quote:86ca8822f4="changrui8210"]大师呀,滔滔江水
不过我觉得循环中哪句在前是一样的吧[/quote]没看前面说输出缓冲那段吗?
回复

使用道具 举报

发表于 2005-4-21 23:17:28 | 显示全部楼层
[quote:c523e13f02="changrui8210"]大师呀,滔滔江水
不过我觉得循环中哪句在前是一样的吧[/quote]
当然不一样,自己十一是
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 07:46 , Processed in 0.042439 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表