Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > pc中的时间
【标  题】:pc中的时间
【关键字】:pc
【来  源】:http://blog.csdn.net/xjyhust/archive/2006/12/29/1467266.aspx

pc中的时间

Your Ad Here

//说明:原文和作者不祥。

pc硬件中,有三种基本的获得时间的方法。
1)the “tick” counter。这是个毫秒(千分之一妙)的记时器,可以用temeGetTime()或者GetTickCount()获得。这个记时器是有ISA中断控制器控制的(可能现在被虚拟化为主板上的芯片,而不是原来放在cpu中)。这是一种精度为毫秒的方法。读取它需要一个bus从LPC到ISA接口转换的请求,所以,这种方法有一点慢(大概1-2微秒)。如果当时的bus正处于繁忙中,比如游戏正在使用AGP和DMA处理图形和声音,这种方法可能会经常丢失一段时间,导致延迟。
2)the “performance” counter。这是一种微秒(百万分之一秒)记时器,可以通过调用QueryPerformanceCounter()来读取。这个记时器,每秒触发一百万次多一点,或者是三百万次多一点,取决于bus。它可能是由PCI控制器触发的。读取它,至少要经过cpu-北桥bus转移,但这样并不是很爽快!可能要花一毫妙。
3)the “time stamp” counter.这是cpu内部的一个寄存器,用的是一个64位的记时器,记录的是cpu从开机以来执行的时间,可以记录130年!读取这个值非常的快,它就在cpu内部(读取一次需要40个周期)。这种方法在精确获得一段代码的运行时间时非常有用。

不幸的是,这三种方法,当你想要把他们转换位实际时间,还需要获得cpu时间和秒之间的关系。这在cpu开机运作的时候,就被决定了,使用的其他的记时器。这种方式可能有一些不精确。更糟的是,在笔记本中,这个寄存器的更新频率会在一个较大的范围内波动,因为,此时cpu的速度也在变化。
所以,在精确计算pc的实际时间的时候,没有“银弹”。如果你想要模拟网络上的同步,你就可能不得不将这三种方法结合起来。我在一般情况下使用cycle sounter,因为这样快而且损失小,然后,我通过后两种记时器不断校正这个时间。如果他们的结果不一致,我就丢掉那个采样点,等到迟一些时候再说。这看起来运行得十分不错。

在cpu的速度可以变化的机器上,你可能会很恼火。你可以做的是选择时钟类的另一个实例,并且希望这种跳跃式的时间带来的不精确不会完全破坏掉你到应用程序。

 

Java2游戏编程读书笔记第四章参考答案:【上一篇】
flash mx中的输入文本里是否支持html语言呀:【下一篇】
【相关文章】
  • 免费的系统安全测试软件PC Security Test
  • ACM/ICPC Greater NewYork 2006 Report
  • 什么是葡萄籽opc葡萄籽软胶囊葡萄籽作用葡萄籽胶囊用康本葡萄籽软胶囊“拯救”睡眠
  • 用SmtpClient发送电子邮件
  • 用BAT和VBS搜集AD中的客户PC资料
  • PC Language
  • TopCoder武大站第一题
  • TopCoder武大站第二题
  • TopCoder武大站第三题
  • WinPcap 4.0 beta 2
  • 【随机文章】
  • <转>BIOS中英文对照表(中)
  • 58种网页常用小技巧(javascript)(转)
  • Struts,MVC的一种开放源码实现用这种 servlet 和 JSP 框架管理复杂的大型网站(2)
  • cp
  • 分享我的网赚
  • winsock i/o的select模型的学习测试
  • 灌水,应和上一篇合在一起。。。
  • 还是礼物
  • 支援Ubuntu的重大意义
  • 天堂2 20以后的席林
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.