ios - 在 iOS 中将 mach_absolute_time 转换为 (nano) 秒 (objective-C)
问题描述
我正在尝试在 iOS 中编写一个辅助方法,以允许我使用mach_absolute_time()
秒(或纳秒),以便我可以找到时间导数传入的设备传感器数据。这是我的尝试:
#include <mach/mach_time.h>
- (double) convertMachAbsoluteTimeIntoSeconds:(uint64_t) mach_time {
mach_timebase_info_data_t _clock_timebase;
double nanos = (mach_time * _clock_timebase.numer) / _clock_timebase.denom;
return nanos / 10e9;
}
上面的代码正在编译,但我得到的当前警告是'*'的右操作数是垃圾值'。另外,在任何情况下它都不会返回合理的结果:/
从我读过的内容来看,mach_absolute_time()
有一些特质,所以我认为让这个工作可能对其他人有用。
所有的帮助都亲切地接受了。谢谢
//// 编辑 ////
感谢 Rob Napier 的超快速回答,这里是包含初始化的方法:
#include <mach/mach_time.h>
- (double) convertMachAbsoluteTimeIntoSeconds:(uint64_t) mach_time {
mach_timebase_info_data_t _clock_timebase;
mach_timebase_info(&_clock_timebase); // Initialize timebase_info
double nanos = (mach_time * _clock_timebase.numer) / _clock_timebase.denom;
return nanos / 10e9;
}
解决方案
您已经声明_clock_timebase
了 ,但您从未对其进行初始化,因此它只是在堆栈上填充了垃圾值。你的意思是:
mach_timebase_info_data_t _clock_timebase;
mach_timebase_info(&_clock_timebase); // Initialize timebase_info
...
AbsoluteToNanoseconds
您可能会发现使用它为您执行此操作更方便。有关完整示例,请参阅QA1398:马赫绝对时间单位。
请注意,mach_timebase_info 承诺是 stable,因此如果您愿意,您可以将其初始化一次。(如果它不稳定,用现有的 API 检查它就不可能避免竞争条件,所以好东西......)
推荐阅读
- javascript - Nashorn 挂在螺纹内
- laravel - laravel API 资源。删除请求会话已过期。仅获取方法工作
- python - 我可以直接在列表或矩阵上应用 exp 函数吗?
- javascript - XMLHttpRequest 在 WordPress 中不起作用
- sql - SQL SERVER 按月分组日期时间戳
- arguments - 将参数传递给 Colab .ipynb 脚本
- django - 如何在 Django Admin 中显示数据
- kubernetes - 如何在 kubernetes 仪表板中将基本身份验证模式设置为基于令牌?
- html - 如何在标准 html 中显示文本
- c - 信号处理程序不处理信号