实现准确的定时器

1、纳秒级精度的Timer

#include <mach/mach.h>
#include <mach/mach_time.h>

static const uint64_t NANOS_PER_USEC = 1000ULL;
static const uint64_t NANOS_PER_MILLISEC = 1000ULL * NANOS_PER_USEC;
static const uint64_t NANOS_PER_SEC = 1000ULL * NANOS_PER_MILLISEC;

static mach_timebase_info_data_t timebase_info;

static uint64_t abs_to_nanos(uint64_t abs) {
    return abs * timebase_info.numer  / timebase_info.denom;
}

static uint64_t nanos_to_abs(uint64_t nanos) {
    return nanos * timebase_info.denom / timebase_info.numer;
}

void example_mach_wait_until(int argc, const char * argv[]) {
    mach_timebase_info(&timebase_info);
    uint64_t time_to_wait = nanos_to_abs(10ULL * NANOS_PER_SEC);
    uint64_t now = mach_absolute_time();
    mach_wait_until(now + time_to_wait);
}

2、后台开一个常驻线程,无繁重任务,开启一个NSTimer。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 7,824评论 1 17
  • OpenCVDemo github地址:https://github.com/xupingwei/OpenCVDe...
    徐平伟阅读 2,338评论 0 0
  • 觉醒之前,你是别人 觉醒之后,你是自己 觉醒之前,你的理论知识大过现实 觉醒之后,你的现实实践大于理论。 觉醒之前...
    觉知中的帆阅读 1,585评论 0 0
  • “哈哈哈……哈哈……”同学们开始玩拷贝不走样的游戏了。 男生组表演完了,轮到女生组了。女生组开始...
    5666徐阅读 5,476评论 0 1
  • 2016结束了,正是在2016年我开始喜欢摄影,但真的只是喜欢而已,没接触过专业知识,也没有摄影器材,只能拿手...
    XGG阅读 3,599评论 16 20

友情链接更多精彩内容