jpcsp源码解读之四:Clock类
2012-03-19 11:36
169 查看
时钟类的行为:
当用户请求时,就返回当前时间与初始时间的差值。
注意,这是一个模拟器,该类就是模拟目标机器psp的时钟。该类的用户,就是运行于psp机器上的软件(应该是系统软件才会直接从硬件提取时钟信息),或者机器中的其他硬件(比如前一篇提到的Screen类)。返回给用户的时间,应该是机器自加电复位之后,已经运行了的时间。但是模拟器是提供了暂停功能的,暂停期间的时间,不应该被计入模拟器加电复位之后运行了的总时间。
nanoTime这个函数就是返回当前时间与初始时间的差值。该函数先检查模拟器当前是否被暂停,如果是暂停的,now就应该取暂停时的时间pauseNanos,否则now取当前系统时间System.nanoTime()。然后返回now-baseNanos
pause函数取得系统当前时间,记录在pauseNanos变量中,并且把暂停标记置位。
resume函数是相对于pause函数的,如果暂停标记被置位,说明之前pause过,resume才有动作。resume的动作是:
baseNanos += System.nanoTime() - pauseNanos;
也就是把暂停期间经历的时间累计到base中,这样以后用户请求nanoTime时,依然是上述的now-baseNanos的逻辑。(一个稍有味道的小技巧)
然后清除暂停标记。
当用户请求时,就返回当前时间与初始时间的差值。
注意,这是一个模拟器,该类就是模拟目标机器psp的时钟。该类的用户,就是运行于psp机器上的软件(应该是系统软件才会直接从硬件提取时钟信息),或者机器中的其他硬件(比如前一篇提到的Screen类)。返回给用户的时间,应该是机器自加电复位之后,已经运行了的时间。但是模拟器是提供了暂停功能的,暂停期间的时间,不应该被计入模拟器加电复位之后运行了的总时间。
nanoTime这个函数就是返回当前时间与初始时间的差值。该函数先检查模拟器当前是否被暂停,如果是暂停的,now就应该取暂停时的时间pauseNanos,否则now取当前系统时间System.nanoTime()。然后返回now-baseNanos
pause函数取得系统当前时间,记录在pauseNanos变量中,并且把暂停标记置位。
resume函数是相对于pause函数的,如果暂停标记被置位,说明之前pause过,resume才有动作。resume的动作是:
baseNanos += System.nanoTime() - pauseNanos;
也就是把暂停期间经历的时间累计到base中,这样以后用户请求nanoTime时,依然是上述的now-baseNanos的逻辑。(一个稍有味道的小技巧)
然后清除暂停标记。
相关文章推荐
- JPCSP源码解读15:动态二进制翻译3(翻译引擎最终章)
- jpcsp源码解读5:umd光盘镜像(.iso)
- jpcsp源码解读6:PSF文件
- jpcsp源码解读之一:源码的获取与编译,以及psp详尽硬件信息文档
- jpcsp源码解读8:cpu状态
- jpcsp源码解读之二:main函数与jpcsp的初始化流程
- jpcsp源码解读之三:Screen类
- jpcsp源码解读12:本地码管理器与Compiler.xml
- jpcsp源码解读9:指令的抽象描述与指令的译码
- JPCSP源码解读16:HLE与模块装载过程
- jpcsp源码解读13:动态二进制翻译1
- jpcsp源码解读10:指令的执行
- jpcsp源码解读11:近期笔记
- JPCSP源码解读14:动态二进制翻译2
- jpcsp源码解读7:HLE
- JDK之HashMap源码解读
- java集合07--Stack源码解读
- ChannelHandlerContext 常用Api源码解读
- java-源码解读-FutureTask
- sklearn中gbdt源码解读笔记