我正在编写一个
Cocoa OS X(Leopard 10.5)最终用户程序,它使用时间戳计算屏幕上显示的时间长短的统计信息.使用重复的NSTimer程序运行程序时定期计算时间. [NSDate date]用于捕获“开始”和“完成”时间戳.计算两个日期之间的差异在几秒钟内是微不足道的.
如果最终用户或ntp更改系统时钟,则会出现问题. [NSDate date]依赖于系统时钟,所以如果改变了,那么Finish变量将相对于Start来歪斜,大大的弄乱了时间的计算.我的问题:
1.即使在系统时钟中途更改时,如何准确计算“开始”和“完成”之间的时间(以秒为单位)?
我想我需要一个不变的参考点,所以我可以计算出从那以后过去了几秒钟.例如,系统运行时间. 10.6具有 – (NSTimeInterval)systemUptime,这是NSProcessInfo的一部分,它提供系统正常运行时间.但是,由于我的应用程序必须在10.5中工作,所以这不行.
我尝试使用NSTimer创建一个时间计数器,但这并不准确. NSTimer有几种不同的运行模式,一次只能运行一次. NSTimer(默认情况下)被置于默认运行模式.如果用户在足够长的时间内开始操作UI,这将进入NSEventTrackingRunLoopMode并跳过默认运行模式,这可能会导致NSTimer启动被跳过,从而使其不太准确地计算秒数.
我还考虑创建一个单独的线程(NSRunLoop)来运行NSTimer秒计数器,使其远离UI交互.但是我很新的多线程,如果可能,我想远离它.另外,我不知道这是否会在cpu被另一个应用程序(Photoshop渲染大图像等)挂起的情况下正常工作,导致我的NSRunLoop被搁置了足够长的时间,的NSTimer.
我感谢任何帮助. 原文链接:https://www.f2er.com/c/115629.html