QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 756|回复: 2

帮忙优化一下(改一下吧)---非原创

[复制链接]
发表于 2004-9-2 07:23:54 | 显示全部楼层 |阅读模式
int main()
{
int i,j;
char buffer[512];
if((i=open("/dev/ttyS0",O_RDWR | O_NDELAY))<0)
{
printf("Can not open the /dev/ttyS0");
}
else
{
while(1)
{
j=read(i,buffer,5);
printf("%s",buffer);
}
}
return 0;
}
代码如上,循环读取串口数据,程序运行时,所显示的串口数据倒是正确的,也能及时显示,
但是运行过程中,用户CPU占有率达到了36%,系统高达60%,只剩下不到4%是空闲的。一般的时候
运算量大的程序运行(如用mplayer播放电影),用户占有率也很少高出30%,系统占有率很少高出20%,
肯定是我上面的程序有问题啦,估计问题出在while(1)那里,这个情况怎么解决呢?
发表于 2004-9-2 20:24:22 | 显示全部楼层

Re: 帮忙优化一下(改一下吧)---非原创

先重排版下……
[code:1]
int main()
{
  int i,j;
  char buffer[512];
  if((i=open("/dev/ttyS0",O_RDWR | O_NDELAY))<0) {
    printf("Can not open the /dev/ttyS0");
  }
  else {
    while(1) {
      j=read(i,buffer,5);
      printf("%s",buffer);
    }
  }
  return 0;
}
[/code:1]
回复

使用道具 举报

发表于 2004-9-2 23:12:23 | 显示全部楼层
是不是因为这个参数: O_NDELAY,将IO设置成了NODELAY也就是非阻塞模式了。如果你想让CPU占用率下降,肯定得用阻塞模式。我也不是很清楚这个函数参数的意思,随便猜的。再等待高手来解决...
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-7 13:41 , Processed in 0.042805 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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