c-h*_*had 9 cocoa nsnotifications
我有一个Cocoa应用程序,记录事件的日期戳.我需要知道系统时间何时重置以及重置多少,但我似乎无法在任何告知我发生过这种情况的通知.这种变化可能发生,因为NTP重置时钟或因为用户重置(例如从系统偏好设置).如果NSNotification我能注册接收会很好,但我愿意接受任何建议.
Dav*_*her 15
Apple 在Snow Leopard(10.6)的NSSateClockDidChangeNotification中加入了NSDate的一部分.似乎没有办法在Leopard(10.5)或更早版本中执行此操作.根据Apple NSDate文档:
系统时钟更改时发布.这可以通过调用settimeofday()或用户更改"日期和时间首选项"面板中的值来启动.通知对象为null.此通知不包含userInfo字典.
这似乎并没有告诉你"多少"时间已经改变.您可以通过定期(例如,a中每5秒NSTimer)捕获系统时间来计算[NSDate date],将其保存到变量中,然后在NSSystemClockDidChangeNotification触发后,抓住新日期并使用NSDate的timeIntervalSinceDate:方法将两者进行比较以获得差异.
不是毫秒甚至是第二准确,但非常接近.
编辑: 看这篇文章.您可以使用UpTime()C命令获取CPU tics中的系统正常运行时间(稍后可以将其转换为秒).您可以使用它来计算出更改的时间(假设没有系统重启或休眠).即使系统时钟被用户或网络时间协议更改,这也可以工作.
Gir*_*ari 10
如果有人正在寻找解决方案,请知道系统日期更改事件从10.4开始
OSStatus DateChangeEventHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void *userData)
{
NSLog(@"Event received!\n");
return 0;
}
- (void)SystemTimeChangeHandler
{
EventTypeSpec eventType;
eventType.eventClass = kEventClassSystem;
eventType.eventKind = kEventSystemTimeDateChanged;
EventHandlerUPP eventHandlerUPP =
NewEventHandlerUPP(DateChangeEventHandler);
EventHandlerRef eventHandlerRef = NULL;
(void)InstallApplicationEventHandler(
eventHandlerUPP,
1,
&eventType,
self,
&eventHandlerRef);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4386 次 |
| 最近记录: |