在使用定时器时,我们经常使用NSTimer,但是由于NSTimer会受RunLoop影响,当RunLoop处理的任务很多时,就会导致NSTimer的精度降低,所以在一些对定时器精度要求很高的情况下,应该考虑采用GCD定时器,实现代码如下: // 队列(队列时用来确定该定时器存在哪个队列中) dispatch_queue_t queue = dispatch_get_main_queue(); // 创建GCD定时器 _timer = dispatch_source_create(DISPATCH…
#import "ViewController.h" @interface ViewController (){ IBOutlet UIButton *l_timeButton; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [l_timeButton addTarget:self action:@selector(startTime) forControlEvents:…
什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个runloop中,并给它提供一个 target 和selector 在屏幕刷新的时候调用. 一但 CADisplayLink 以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector,这时target可以读到 …
我们常常有设置系统在某一时间执行相应动作的需求,比如设置电脑什么时候自动锁屏,什么时候自动关机,设置应用程序什么时候自动运行,什么时候自动退出.这些与时间相关的功能,都需要依靠操作系统中的定时器来实现. linux中定时器的使用原理很简单,你只需设置一个超时时间和相应的执行函数,系统就会在超时的时候执行一开始设置的函数.超时的概念有点模糊,它指的是你设定一个时间,如果当前的时间超过了你设定的时间,那就超时了.比如说,你设置五分钟后系统自动关机,系统会记住五分钟后的具体时间,也就是当前时间再加上五…
实际项目开发中经常会遇到延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. iOS中延迟操作有三种解决方案: 1.NSObject的方法:(对象方法) p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Menlo } span.s1 { } span.s2 { color: #bb2ca2 } span.s3 { color: #703daa } - (void)performSelector:…
前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把runloop搞一下,之前看了很多资料,也按照对应的在项目中的应用点写了几个demo,其中两个demo非原创,直接拿过来借花献佛了.今天才有时间把它们总结一下,并记录下来.关于runloop的基础知识我就不多介绍了,网上一堆介绍的文章,这里只说实际项目中的使用点,毕竟东西是拿来用的. 1.关于轮播图 第…
更正:队列名称的作用的图中,箭头标注的有些问题,已修正 本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 本文源码 Demo 详见 Githubhttps://github.com/shorfng/iOS-4.0-multithreading.git   1.0 GCD简介   GCD概念 :(Grand Central Dispatch)可译为“伟大的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD 的优势:  GCD是苹果公司…
线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并发4个线程在一百万个数字中找最小值和最大值的pthread例子: #import <pthread.h> struct threadInfo { uint32_t * inputValues; size_t count; }; struct threadResult { uint32_t min;…
基于事件的异步模式 (EAP -- The Event-Based Asynchronous Pattern) EAP提供了一个简单的办法,通过它的类能够提供多线程能力,而不需显式的开启或管理线程.它还提供了以下特性: 取消合作模式 当工作线程完成时,安全更新WPF或WF的能力 转发异常给完成的事件 EAP只是一种模式,因此它的这些特性必须由实现的人来完成.框架中只有少数几个类遵循了这个模式,最明显的是BackgroundWorker和WebClient.这个模式的本质:一个类提供了一系列家族成…
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种: 1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创建维护也需要很多的开销.(Apache服务器是用的子进程的方式,优点可以隔离用户) 2.用一个进程,但是使用非阻塞的I…
引言 一直以来RunLoop就是个神秘的领域,好多2.3年的开发者都不能准确的表述它的作用,说它神秘,其实RunLoop并没有大家想象中的那么神秘,那么不好理解,本文就带大家好好剖析一下”神秘的RunLoop” 什么是RunLoop 从字面上看 运行循环 跑圈 循环 基本作用 保持程序的持续运行(比如主运行循环) 处理App中的各种事件(比如触摸事件.定时器事件.Selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休息时休息 存在价值   没有RunLoop 有RunLoop…
iOS中常用的多线程操作有( NSThread, NSOperation GCD ) 为了能更直观的展现多线程操作在SB中做如下的界面布局: 当点击下载的时候从网络上下载图片: - (void)loadImgFromURl{ NSURL *url=[NSURL URLWithString:@"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&…
一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种: 1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创建维护也需要很多的开销.(Apache服务器是用的子进程的方式,优点可以隔离用户) 2.用一个进程,但是使用非阻塞的I/O读取数据,当一个I/O不可读的时候立刻返回,检查下一个是否可读,这种形式的循环为…
IO复用是一种机制,一个进程可以监听多个描述符,一旦某个描述符就绪(读就绪和写就绪),能够同志程序进行相应的读写操作. 目前支持I/O复用的系统调用有select,poll,pselect,epoll,本质上这些I/O复用技术是同步I/O技术.在读写事件就绪后需要进程自己负责进行读写,即读写过程是进程阻塞的. 与多进程和多线程相比,I/O复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销. 同步I/O操作导致请求进程阻塞,直到I/O操作完成…
版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供易于提取和更好的性能 可用于在JSON响应上断言的新JSON Assertion元素. 提供新的精确吞吐量定时器元件,可在给定的恒定吞吐量下产生泊松到达. JMS点对点采样器增强了读取,浏览和清除选项. 现在,在许多测试元素上选择了最佳属性值,以确保最佳实践是默认值: 新添加如果Controller…
//倒计时时间 __block int timeout = 60; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//创建globle队列 //创建timer 定时器 dispatch_source_t  _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); //每秒执行. 设…
  什么是RunLoop 注释:和ppt上总结的一样 和代码一块去理解 从字面上看 运行循环 跑圈 循环 基本作用 保持程序的持续运行(比如主运行循环) 处理App中的各种事件(比如触摸事件.定时器事件.Selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休息时休息 存在价值 没有RunLoop 有RunLoop main函数中的RunLoop(主运行循环) 主运行循环 第14行代码的UIApplicationMain函数内部就启动了一个RunLoop 所以UIApplicat…
1.NSTimer 存在一定的误差,不管是一次性的还是周期性的timer得实际触发事件的时间,都会与所加入的runloop和runloopMode有关,如果此runloop正在执行一个连续性的运算,timer就会被延时触发. // 创建方式1 NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:YES];…
select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 作为一个例子,我们可以调用select,告知内核仅在下列情况发生时才返回: (1)集合{1,4,5}中的任何描述字准备好读,或 (2)集合{2,7}中的任何描述字准备好写,或 (3)集合{1,4}中的任何描述字有异常条件待处理,或 (4)已经历了10.2秒. 也就是说,我们调用select告知内核对哪些描述字(就读.写或异常条件)感兴趣以及等待多长时间…
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回).可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不…
看了一堂公开课,自己小结一下: Runloop: 内部有三个东东:(Source, Timer, Observer) 作用/本质:1.死循环 (为app 保活): 2.监听处理事件 Timer 理解: #pragma runloop -- Timer 理解 () NSThread *theard = [[NSThread alloc] initWithBlock:^{ NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 repeats:YES…
非阻塞I/O 阻塞I/O对应于低速的系统调用,可能会使进程永远阻塞.非阻塞I/O可以使我们发出open.read.write这样的I/O操作,并使这些操作不会永远阻塞.如果这种操作不能完成,则调用立即错误返回,其表示该操作如果继续执行将会阻塞. 对于一个给定的描述符,有两种为其指定非阻塞I/O的方法: (1)   如果是调用open获得文件描述符,则可指定O_NONBLOCK标志. (2)   对于一个已经打开的文件描述符,则可以调用fcntl,由该函数打开O_NONBLOCK文件状态标志. 如…
早在1990年,Leslie Lamport(即 LaTeX 中的"La",微软研究院科学家,获得2013年图灵奖)向ACM Transactions on Computer Systems (TOCS)提交了关于Paxos算法的论文The Part-Time Parliament.几位审阅人表示,虽然论文没什么特别的用处,但还是有点意思,只是要把Paxos相关的故事背景全部删掉.Leslie Lamport心高气傲,觉得审阅人没有丝毫的幽默感,于是撤回文章不再发表.直到1998年,用…
简述 QTimer类提供了重复和单次触发信号的定时器. QTimer类为定时器提供了一个高级别的编程接口.很容易使用:首先,创建一个QTimer,连接timeout()信号到适当的槽函数,并调用start(),然后在恒定的时间间隔会发射timeout()信号. 注意:当QTimer的父对象被销毁时,它也会被自动销毁. 简述 详细说明 精度 替代QTimer 成员函数 信号 示例 效果 源码 更多参考 详细说明 在Qt之模拟时钟中,1秒(1000毫秒)更新一次: QTimer *timer = n…
1.Linux中的信号(有32个)  信号会中断一些函数的阻塞 https://zhidao.baidu.com/question/1766690354480323100.html #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #define SIGBUS 7 #define SIGFPE 8 #de…
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回).可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不…
申明:本文内容属于转载整理,原文连接 前言: CocoaAsyncSocket是谷歌的开发者,基于BSD-Socket写的一个IM框架,它给Mac和iOS提供了易于使用的.强大的异步套接字库,向上封装出简单易用OC接口.省去了我们面Socket向Socket以及数据流Stream等繁琐复杂的编程. 本文为一个系列,旨在让大家了解CocoaAsyncSocket是如何基于底层进行封装.工作的. 注:文中涉及代码比较多,建议大家结合源码一起阅读比较容易能加深理解.这里有楼主标注好注释的源码,有需要的…
import XXXsign.Openapi2sign;---导入jar包中的签名方法 String str1 = "12121"; ---需要被签名的字段:向开发了解需要哪些哪些字段 String result = ""; --定义结果变量 result = new Openapi2sign().md5Encode(str1); ---调用签名的方法对签名字段进行签名 System.out.println(result); ---输出签名后的字段 vars.put…
目录 简述 详细说明 精度 替代QTimer 成员函数 信号 示例 简述 QTimer类提供了重复和单次触发信号的定时器. QTimer类为定时器提供了一个高级别的编程接口.很容易使用:首先,创建一个QTimer,连接timeout()信号到适当的槽函数 , 并调用start(),然后在恒定的时间间隔会发射timeout()信号. 注意:当QTimer的父对象被销毁时,它也会被自动销毁. 详细说明 1秒(1000毫秒)更新一次: QTimer *timer = new QTimer(this);…
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种: 1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创建维护也需要很多的开销.(Apache服务器是用的子进程的方式,优点可以隔离用户) 2.用一个进程,但是使用非阻塞的I…