先介绍下C中的modf函数

函数名:modf
头文件:<math.h>
函数原型:double modf(double x, double *ipart)
函数用途:分解x,以得到x的整数和小数部分
输入参数:x
待分解的数输出参数:ipath x 的整数部分
返回值:x 的小数部分
 

多线程开发中,可能会有等待一段时间后再运行的情况,此时就用到了dispatch_after函数,调用该函数时第一个参数用的dispatch_time_t类型的值。该值使用dispatch_time函数或者dispatch_walltime函数完成。

1.dispatch_time函数能够获取从第一个参数dispatch_tiem_t类型值指定的时间开始,到第二个参数指定的毫秒单位时间后的时间。第一个参数经常使用的值是之前源代码出现的DISPATCH_TIME_NOW,表示现在的时间。第二个参数是等待时间。该方法主要计算相对时间。

1
2
3
4
5
//#define NSEC_PER_SEC 1000000000ull  1秒
//#define NSEC_PER_MSEC 1000000ull    1毫秒
//#define USEC_PER_SEC 1000000ull     1毫秒
//#define NSEC_PER_USEC 1000ull       1纳秒
//ull                                 1皮秒 1毫微秒

2.dispatch_walltime函数主要用于计算绝对时间。例如在dispatch_after函数想指定2015年03月27日11时11分11秒的这一绝对时间的情况,这可作为粗略的闹钟功能使用。在dispatch_walltime函数中要一个struct timespec类型的时间,该时间可以通过NSDate类对象完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NSTimeInterval interval;
    double second,subsecond;
    struct timespec time;
    dispatch_time_t milestone;
    interval=[date timeIntervalSince1970];
    NSLog(@"%f",interval);
     
    subsecond=modf(interval, &second);
    NSLog(@"%f",second);
    NSLog(@"%f",subsecond);
    time.tv_sec=second;
    time.tv_nsec=subsecond*NSEC_PER_SEC;
     
    milestone=dispatch_walltime(&time, 0);
    NSLog(@"%llu",milestone);
    return milestone;

3.运行该方法的结果如下图(主要是查看modf方法)

4.学习完dispatch_time_t,下面再学习dispatch_after.

dispatch_after函数并不是在指定的时间后执行处理,而只是在指定的时间追加处理到Dispatch Queue。

1
2
3
4
5
6
7
8
9
10
NSDate *startDate=[NSDate date];
   NSLog(@"%@",startDate);
   dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, 30*NSEC_PER_SEC);
   dispatch_after(time, dispatch_get_main_queue(), ^{
       NSLog(@"test");
       NSDate *endDate=[NSDate date];
       NSLog(@"%@",endDate);
   });
   NSDate *endDate=[NSDate date];
   NSLog(@"%@",endDate);

5.运行结果

GCD之after的更多相关文章

  1. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  2. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  3. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  4. 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  5. GCD的相关函数使用

    GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...

  6. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  7. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  8. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  9. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  10. GCD总结

    //用block只有两种:同步执行/异步执行(参数1:队列;参数二:任务) dispatch_async(dispatch_get_global_queue(0, 0),^{ });//异步在新的线程 ...

随机推荐

  1. 关于操作系统中多个fork()会创建几个进程的理解

    最近在看操作系统的书,在讲到用fork()创建子进程时,有些地方一时迷惑,最终理解,特记录下来.如下: //创建一个子进程:#include "csapp.h" int main( ...

  2. 横排列表(li)的左右对齐

    效果如下: HTML代码如下: <div class="overdiv"> <ul> <li>1</li> <li>2& ...

  3. 【Linux】修改Linux字符集

    一.查看字符集 常见的几种方法: (1) [root@devhxyw03 ~]# echo $LANG zh_CN.GBK (2) [root@devhxyw03 ~]# env | grep LAN ...

  4. 中了J.Fla的毒!

    中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒!中了J.Fla的毒! ...

  5. django富文本编辑器

    -------------------tinymce富文本编辑器1.下载安装 1.在网站pypi网站搜索并下载"django-tinymce-2.4.0" 2.解压:tar zxv ...

  6. 多模字符串匹配算法之AC自动机—原理与实现

    简介: 本文是博主自身对AC自动机的原理的一些理解和看法,主要以举例的方式讲解,同时又配以相应的图片.代码实现部分也予以明确的注释,希望给大家不一样的感受.AC自动机主要用于多模式字符串的匹配,本质上 ...

  7. Java中常见数据结构Set之HashSet

    今天来说说Java集合中的Set系列之HashSet.   Set我们众所周知的就是虑重功能, 我们平时在项目开发中也常用到这个特性的.那么Set为何能够虑重呢? 接下来我们就看下源码吧.   Set ...

  8. Day-7: 模块知识

    Python中,一个.py文件就是一个模块(module):而,包含了多个模块的一个目录,称为包. 每一个包中,都包含一个_init_.py文件,可以是一个空文件,这是Python将普通目录识别为包的 ...

  9. 学习js函数--自执行函数

    我在写代码时候经常会在tpl的<script>里写类似的代码: $(function(){ alert("我好饿"); }); 刚开始的时候只知道写了它不需要调用,直接 ...

  10. 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...