在 Cocoa 中计算两个时间点之间的秒数,即使系统时钟中途发生了变化

2023-11-21

我正在编写一个 Cocoa OS X (Leopard 10.5+) 最终用户程序,该程序使用时间戳来计算屏幕上显示内容的统计时间。当程序运行时,使用重复的 NSTimer 定期计算时间。[NSDate date]用于捕获时间戳,Start and Finish。以秒为单位计算两个日期之间的差异是微不足道的。

如果最终用户或 ntp 更改系统时钟,就会出现问题。[NSDate date]依赖于系统时钟,所以如果它改变了,Finish变量将相对于Start,严重扰乱时间计算。我的问题:

1.如何准确计算之间的时间Start and Finish,以秒为单位,即使系统时钟中途更改?

我想我需要一个不变的时间参考点,这样我就可以计算从那时起已经过去了多少秒。例如,系统正常运行时间。 10.6有- (NSTimeInterval)systemUptime, 部分NSProcessInfo,提供系统正常运行时间。但是,这不起作用,因为我的应用程序必须在 10.5 中运行。

我尝试过使用 NSTimer 创建时间计数器,但这并不准确。 NSTimer 有几种不同的运行模式,并且一次只能运行一种。 NSTimer(默认情况下)被放入default运行模式。如果用户开始操作 UI 的时间足够长,就会进入NSEventTrackingRunLoopMode并跳过default运行模式,这可能导致 NSTimer 触发被跳过,使其成为一种不准确的秒数计数方式。

我还考虑过创建一个单独的线程(NSRunLoop)来运行 NSTimer 秒计数器,使其远离 UI 交互。但我对多线程非常陌生,如果可能的话我想远离它。另外,我不确定如果 CPU 被另一个应用程序(Photoshop 渲染大图像等)固定,这是否能正常工作,导致我的 NSRunLoop 被搁置足够长的时间以弄乱它的NSTimer。

我很感激任何帮助。 :)


根据驱动此代码的原因,您有 2 个选择:

  • 对于绝对精度,请使用mach_absolute_time()。它将准确给出您调用该函数的点之间的时间间隔。
  • 但在 GUI 应用程序中,这实际上通常是不可取的。相反,您想要的是之间的时差events开始和结束你的持续时间。如果是这样,比较一下[[NSApp currentEvent] timestamp]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Cocoa 中计算两个时间点之间的秒数,即使系统时钟中途发生了变化 的相关文章

  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行
  • UIDocumentInteractionController 阻止“打开方式”表中的空投

    在我的应用程序中 我允许用户通过 Instagram 分享照片 这需要使用 UIDocumentInteractionController 如果手机支持 则会自动检测空投 如何将其从 打开方式 操作表中删除 即使我使用 UIActivity
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 如何解决 CoreData mogenerator 未找到问题

    我收到如下所示的错误 我不知道我错过了什么 我该如何解决这个问题 如下图所示 Users nischalhada Documents XcodePro mnepalnews revisited 2 0 CoreData mogenerato
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 使用 NSError 检查错误的正确结构

    我正在编写各种例程 并尽力保持其整洁和重构 我正在创建的方法开始看起来与此代码类似 IBAction buttonPress id sender Create Document Shopping List with this documen
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • 拖动时获取MKAnnotation的坐标

    我正在根据用户添加的注释的位置创建一条路径 MKPolyline 我想允许用户通过拖动引脚来更改路径 我目前可以做到这一点 但 MKPolyline 不会更新 直到引脚被放下 我实施了 void mapView MKMapView mapV
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于
  • 获取对 iOS 应用程序中最顶层视图/窗口的引用

    我正在创建一个可重用的框架 用于在 iOS 应用程序中显示通知 我希望将通知视图添加到应用程序中其他所有内容的顶部 有点像 UIAlertView 当我初始化监听 NSNotification 事件并添加视图作为响应的管理器时 我需要获取对
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • 使用超类初始化器初始化类

    我有两个类 一个是另一个的子类 比如说Animal and Dog 超类有一些初始化器 比如initAnimal 子类有一些初始化器 比如initDog 问题是 从编译器的角度来看 做类似的事情是完全合法的Dog adog Dog allo
  • 玻璃效果 UIView

    我想知道如何在 UIView 上添加玻璃效果 我想像这样的效果 http pttrns com pickers detail 0dc9d9f6c6a7577613b3453768eee3b3在灰色半透明视图上 您 可以在这里看到 Thank
  • 适用于 Objective-C / iPhone 的良好 HTTP 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPDATE 这个问题显然已经过时了 参见日期 我建议只使用现代 iOS7 功能 例如 NSURLSession 我想 这个问题是为了历史
  • 确定 NSView 是否绘制的正确方法

    有没有正确的方法来确定是否NSView实际上是否在当前视图层次结构中绘制 考虑以下情况 视图完全在屏幕外 不是强制性的 该视图不在视图层次结构的顶部 The isHidden and isHiddenOrHasHiddenAncestor不
  • Swift 中带圆角的 NSWindow

    我想要一个圆角的窗户 但我在每个角落都有一个白点 Code let effect NSVisualEffectView frame NSRect x 0 y 0 width 0 height 0 effect blendingMode be
  • 如何更改已上传的 Firebase 存储图像文件名?

    我需要更改已上传到 firebase 存储中的文件名 因为 在 firebase 存储中上传图像后 我将 url 保存在 firebase 数据库中的特定子 文件夹 下 但是 当我将图像移动到另一个子 文件夹 时 我需要根据新名称更改存储中
  • 将 CALayer 旋转 90 度?

    如何旋转CALayer90度 我需要旋转所有内容 包括子图层和坐标系 Obj C theLayer transform CATransform3DMakeRotation 90 0 180 0 M PI 0 0 0 0 1 0 Swift

随机推荐

  • 如何在 Microsoft Visual Studio 2012 中制作项目/解决方案的副本?

    正如标题所述 如何在 Microsoft Visual Studio 2012 中制作项目 解决方案的副本 就是这么简单的一个选项 却似乎不可用 好消息是 如果您安装了 Blend for Visual Studio 2012 它随我的 M
  • 将选定的语言选项存储在 cookie/localSession 中

    我希望我的 Next js 应用程序记住用户喜欢哪种语言 因此我想将其存储在客户端的 cookie 中 我有 2 种语言选项 英语和法语 默认情况下 语言设置为英语 无 cookie myapp com 但是一旦用户点击 EN 首选项 UR
  • Emacs 和 Git 在 Windows 上显示错误的时间

    Emacs 与系统时间相差两个小时 我尝试用谷歌搜索这个问题 但没有成功 我需要配置什么来纠正这个问题 我怀疑这是从 GMT 到我住的地方的差异 我在 GMT 2 时区 也就是说 如果我从系统时间 2 中减去 我将得到 Emacs 中的时间
  • 如何从 survfit 对象中提取值

    我创建了这个模型 model lt survfit Surv time status c sex model 输出是 Call survfit formula Surv time status c sex records n max n s
  • 突破filter()函数

    我想优化依赖于 filter 的函数 在某些情况下 当它们达到某些元素时 我想摆脱它们 例如 我可能有一个由不同元素组成的数组 或者 我只想实现一种 findFirst 功能 在这种情况下 函数继续执行到数组末尾似乎效率很低 这对于循环来说
  • 尝试模拟鼠标单击/拖动

    所以我试图模拟鼠标左键单击和鼠标左键释放来进行一些自动拖放 它目前在 C Winforms 中 是的 winforms 并且有点笨拙 基本上 一旦发送 点击 我希望它根据 Kinect 输入更新光标位置 Kinect 方面的事情很好 但我不
  • CSS3 100vh 在移动浏览器中不是恒定的

    我有一个非常奇怪的问题 在每个浏览器和移动版本中我都遇到了这种行为 当您加载页面时 所有浏览器都有一个顶部菜单 例如显示地址栏 当您开始滚动页面时 该菜单会向上滑动 100vh 有时仅针对视口的可见部分进行计算 因此当浏览器栏向上滑动时增加
  • 将本地目录挂载到 minikube 中的 pod 中

    我正在运行 minikube v0 24 1 在此 minikube 中 我将为我的 nginx 应用程序创建一个 Pod 我还想从本地目录传递数据 这意味着我想安装我的本地 HOME go src github com nginx进入我的
  • 如何使用特定凭据连接到 C# 中的 TFS 服务器?

    我正在尝试编写一个连接到 TFS 并检索工作项信息的 C 应用程序 不幸的是 似乎所有使用 TFS SDK 的示例都使用当前用户的默认凭据 即我的域登录信息 我发现的最接近的信息是使用TeamFoundationServer String
  • Objective-C 有相当于 java 的注释吗?

    Objective C 有相当于 java 的注释吗 我想做的是创建一个属性并能够以某种方式访问 有关它的一些元数据 我希望能够确定我的数组中应该包含什么类型的类 因此我想以某种方式对其进行注释以说明这一点 然后稍后可以通过运行时库之类的东
  • 具有较低基础 sdk 的应用程序如何工作?

    在 XCode 中我可以指定 Base SDK 我想知道这在幕后是如何运作的 例如 如果我在装有 iOS 7 的设备上运行应用程序 而我的基础 SDK 是 iOS 6 那么该应用程序为何具有旧的 外观和感觉 XCode 是否编译旧版 SDK
  • 查找并更新字典列表中字典的值

    我怎样才能找到dictionary有价值user7然后更新它match sum例如 在现有 4 的基础上添加 3 l user user6 match sum 8 user user7 match sum 4 user user9 matc
  • findbugs和数据库密码安全问题

    我使用以下代码来初始化数据库连接 public Connection getConnection try if null connection String driverName com mysql jdbc Driver MySQL MM
  • 从java中的其他类访问私有变量

    我希望我是认真的 我有一堂这样的课 public class MainClass extends JFrame private JLabel mainlabel private SampleClass sample new SampleCa
  • 如何设置和获取 UIButtons 的标签?

    如何以编程方式为按钮设置标签 我后来想比较两个标签来得出结论 我试过这个 IBAction buttonPressed id sender NSLog d sender tag 但这只会使应用程序崩溃 还有其他想法吗 您需要将 sender
  • 重定向至通知访问设置

    我目前正在开发一个 Android 应用程序 该应用程序使用NotificationListenerService 这要求用户在下面启用我的应用程序的通知访问权限Setting gt Security gt Notification Acc
  • 使用 DataSource 通过 (Xerial) sqlite-jdbc 驱动程序连接到 SQLite

    Java教程说有 2 种方法可以通过 JDBC 连接到数据库 驱动管理器类 旧的 不推荐 和数据源 class 我了解如何使用 DriverManager 做到这一点 Connection con DriverManager getConn
  • 如何更改(升级或降级)Angular 版本?

    我最近安装了 Angular 6 想重新使用 Angular 5 2 如何将我的 Angular 版本从我拥有的任何版本更改为我选择的版本 我将尝试对未来类似的问题给出一般性的答案 项目中使用的 Angular 版本由安装的 Angular
  • Swift 协议中的弱属性只能是类或类绑定的协议类型

    我想定义一个在 Viper 架构中使用的协议 以使用具有弱属性的协议在 Viper 组件之间建立连接 但我收到以下错误消息 weak 只能应用于类和类绑定协议类型 不是 Self ViperViewClass protocol ViperP
  • 在 Cocoa 中计算两个时间点之间的秒数,即使系统时钟中途发生了变化

    我正在编写一个 Cocoa OS X Leopard 10 5 最终用户程序 该程序使用时间戳来计算屏幕上显示内容的统计时间 当程序运行时 使用重复的 NSTimer 定期计算时间 NSDate date 用于捕获时间戳 Start and