论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言设计并行处理

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:43:13


要编写一个好的游戏,必需使用到并行机制。并行机制要涉及到一个重要的语句,那就是While语句。你可能不禁会问:那不就是循环吗?对,并行机制就是要利用循环,即游戏循环(Game Loop)。实际上,所有程序并行的本质就是循环,连Windows也不例外。Windows号称多任务操作系统,实际上,在一个时间内CPU只能执行一条指令。所谓多任务,不过是并行的假象而已。在一个循环中分别执行各程序的一条语句,由于执行完该循环速度极快,于是看起来好象是多个任务同时工作一样。还有...,哎,不用费口舌了。相信你对并行有了一个初步应像,这就可以了,让我们继续。
  不是有一种for循环吗,为什么不用它呢?对,for循环也可以。只要可以构成死循环的语句都可以。死循环呀,听起来有点可怕。其实解决死循环简单的很,用break语句,再不行用goto语句,一切死循环都轻松搞定。现在就让我们来练一下兵:

main()
{ int key;
 while(1)
 {if(kbhit())
  {key=getch();
  if(key==0){getch();continue;}
  if(key==27)break;
  if(key==13)printf("\n");/*支持回车*/
  if(key==8&&wherex()>0)
  {gotoxy(wherex()-1,wherey());/*支持退格*/
   putch(' ');
  }
  printf("%c",key);/*输出字符*/
  }
 }
}


上面就是一个典型的文本编辑器界面,现在让我们来修改一下该程序,在屏幕右上角做一个计时器和一个计算击键次数的计数器,该计时器与计数器与文本编辑互不干扰,达到并行的效果。

main()
{ int key,x,y,n=0;
 clrscr();
 while(1)
 {if(kbhit())
  {key=getch();
  if(key==0){getch();continue;}
  if(key==27)break;
  if(key==13)printf("\n");/*支持回车*/
  if(key==8&&wherex()>0)
  {gotoxy(wherex()-1,wherey());/*支持退格*/
   putch(' ');
   gotoxy(wherex()-1,wherey());
   continue;
  }
  printf("%c",key);/*输出字符*/
  n++;/*计数*/
  }
  x=wherex();y=wherey();
  gotoxy(55,1);
  printf(" %d sec,keydown times %d ",clock()/18,n);/*记时,显示*/
  gotoxy(x,y);
 }
}

现在我们实现了简单的并行机制。然而,该循环有个缺点:太耗CPU,假如不按下任何键,CPU也会不停地刷新计数与记时器。于是我们引入了周期的概念,使一个周期只执行一次语句,这样即节省CPU,使用要求执行速度不同的并行语句也轻易控制。程序入下:

/*并行结构*/
#define delay_time 4; /*定义的周期长度*/
main()
{ long now_time=0,old_time,time_count=0;
 char done=0; /*使用done标志使每一个周期只执行一次指令*/
 clrscr();
 old_time=clock();
 while(!kbhit())
 {now_time=clock();
  if(now_time-old_time  {if(!done)
  {puts("计算!"); /*该语句可替换为自己需要并行的语句块*/
   done=1;
  }
  }
  else
  {old_time=now_time;done=0;}
 }
}

假如上面的puts语句换成两个沿对角线移动小球的语句,不就可以实现两个小球同时运动了吗?在程序中动态地调整delay_time的值,还可以确定小球移动的快慢。这只是一个提示,只要遵循该结构,还可以实现好多有趣的效果,读者可以自己去研究。

上一篇:{实例}几个图形(04) 人气:6494
下一篇:{实例}一个桌面闹钟源程序 人气:5396
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058