中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 综合文章
问题:Thread .Sleep(500)后你的线程睡了多久?
作者:未知 时间:2005-07-27 22:36 出处:CSDN 责编:chinaitpower
              摘要:问题:Thread .Sleep(500)后你的线程睡了多久?

我们在J2ME中继承Canvas类的时候一般会再实现Runnable接口,实现多线程的效果个人认为实际上这边的线程不过是起到一个定时器的作用,完全可以用一个Timer或者用一个Inner class来实现这个的功能,在这里不对这个做过多的讨论。

我们的run()这个函数一般是实现这样的功能,定时的处理游戏逻辑gameLogic()和重画屏幕paint()。注意这里的定时是本文的重点,如果执行游戏逻辑和重画屏幕的间隔时间不为固定的话。一定破坏游戏性和游戏画面的真实性。

好了,我们看看一般的处理方法()

public void run() {

   while (true) {

     gameLogic();//处理游戏逻辑

     repaint();//调用paint()重画屏幕

     Thread.sleep(500);//线程sleep0.5

   }

}

看上去好象是每次的间隔就是0.5秒。不过有没有想过如果一个复杂逻辑的游戏gameLogic(),paint()实际上也是需要不少时间来处理的,而且对于一个复杂逻辑的游戏来说每次处理的时间长度都不相同,可能第一次gameLogic()+paint()的时间是0.1秒下一次又有可能是0.01秒。这样不就造成了间隔时间的不固定吗。所以我们必须把gameLogic(),paint()的运算时间计算进去,就象下面那样。

    public void run() {

        time0 = System.currentTimeMillis();

        while (true) {

            time1 = System.currentTimeMillis();

            timePassed = time1 - time0;

            time0 = time1;

            gameLogic();//处理游戏逻辑

            repaint();

            time1 = System.currentTimeMillis();

            if (time1 - time0 < RUN_RATE) {

                try {

                    Thread.sleep(RUN_RATE - (time1 - time0));

                }

                catch (InterruptedException e) {

                }

            }

        }

    }


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有