美文网首页
dispatch time.h

dispatch time.h

作者: 想聽丿伱說衹愛我 | 来源:发表于2020-07-23 16:23 被阅读0次

    版本:iOS13.5

    time.h

    dispatch其他文件通道

    索引

    • 创建一个相对于系统时钟的dispatch_time_t(相对时间)
      dispatch_time
    • 创建一个相对于gettimeofday(3)的dispatch_time_t(绝对时间)
      dispatch_walltime

    详解

    • 创建一个相对于系统时钟的dispatch_time_t(相对时间)
    dispatch_time_t dispatch_time(dispatch_time_t when, int64_t delta);
    

    when 当前值
    若为DISPATCH_TIME_NOW则将使用默认时钟,表示现在
    若为DISPATCH_TIME_FOREVER则将使用默认时钟,表示永远
    若为DISPATCH_WALLTIME_NOW则使用gettimeofday(3)返回的值
    dispatch_time(DISPATCH_WALLTIME_NOW,delta)等同于dispatch_walltime(NULL,delta)
    delta 偏移的时间(纳秒)

    #define NSEC_PER_SEC 1000000000ull//秒
    #define NSEC_PER_MSEC 1000000ull  //毫秒
    #define USEC_PER_SEC 1000000ull   //毫秒
    #define NSEC_PER_USEC 1000ull     //微秒
    
    例:
        //表示创建一个3秒后的时间
        dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC);
        //表示创建一个相对于time5秒后的时间 也就是8秒后
        dispatch_time_t time1 = dispatch_time(time, 5 * NSEC_PER_SEC);
        dispatch_after(time1, dispatch_get_main_queue(), ^{
            
        });
    
    • 创建一个相对于gettimeofday(3)的dispatch_time_t(绝对时间)
    dispatch_time_t dispatch_walltime(const struct timespec *_Nullable when, int64_t delta);
    

    when 要添加时间的struct timespec 是个结构体

    _STRUCT_TIMESPEC
    {
        __darwin_time_t tv_sec; //秒
        long tv_nsec;           //纳秒
    };
    

    如果传入NULL 相当于dispatch_time(DISPATCH_WALLTIME_NOW, delta)
    delta 偏移的时间(纳秒)

    例:
        //距离现在2秒后的时间戳
        NSTimeInterval interval = [[NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]] timeIntervalSince1970];
        //interval的整数部分
        double second;
        //interval的小数部分
        double subsecond;
        //interval分解为整数和小数
        subsecond = modf(interval, &second);
        struct timespec timespec;
        timespec.tv_sec = second;
        timespec.tv_nsec = subsecond * NSEC_PER_SEC;
        //相于对timespec的3秒后 即为现在5秒后
        dispatch_time_t time2 = dispatch_walltime(&timespec, 3 * NSEC_PER_SEC);
        dispatch_after(time2, dispatch_get_main_queue(), ^{
            
        });
    

    dispatch_timedispatch_walltime的区别
    dispatch_time创建的是相对于系统时钟的时间,当device进入休眠之后,系统的时钟也会进入休眠状态, 第一个函数计时就会暂停,当device唤醒后,才会重新开始计时,并且休眠前的计时无效。
    dispatch_walltime创建的是一个绝对的时间,不会受device休眠的影响

    相关文章

      网友评论

          本文标题:dispatch time.h

          本文链接:https://www.haomeiwen.com/subject/zkrhlktx.html