iOS 如何创建一个线程,要求可以一直工作,不会执行一次就结束
来源:互联网 发布:淘宝闲鱼自提怎么交易 编辑:程序博客网 时间:2024/04/27 17:12
http://blog.csdn.net/hu_songsong/article/details/12845391
http://www.dreamingwish.com/frontui/article/default/ios-multithread-program-runloop-the.html
如何创建一个线程,要求可以一直工作,不会执行一次就结束。
@synthesize name;- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadFunc) object:nil]; [thread start];}static bool over = NO;- (void)threadFunc{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; while (YES) { @synchronized(name){ name = @"Frank"; [NSThread sleepForTimeInterval:2]; if ([NSThread isMultiThreaded]) { NSLog(@"%@ isMultiThreaded",name); } if (over) { break; } } } [pool release];}
.结束这个线程:
a)break;
b)[thread cancel]
NSRunloop
一个run loop就是一个事件处理循环,用来不停的调配工作以及处理输入事件。使用run loop的目的是使你的线程在有工作的时候工作,没有的时候休眠。NSRunloop可以保持一个线程一直为活跃状态,不会马上销毁。
在多线程中使用定时器必须开启Runloop,因为只有开启Runloop保持线程为活跃状态,定时器才能运行正常。
- (void)viewDidLoad{ [super viewDidLoad]; //self.view.backgroundColor=[UIColor blueColor]; [self performSelectorInBackground:@selector(multithread) withObject:nil];}-(void)multithread{ NSLog(@"HE"); [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timeAction) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop]run];}-(void)timeAction{ NSLog(@"HELLO");}
1.3.4 退出Run Loop
有两种方法可以让run loop处理事件之前退出:
- 给run loop设置超时时间
- 通知run loop停止
如果可以配置的话,推荐使用第一种方法。指定一个超时时间可以使run loop退出前完成所有正常操作,包括发送消息给run loop观察者。
使用CFRunLoopStop来显式的停止run loop和使用超时时间产生的结果相似。Run loop把所有剩余的通知发送出去再退出。与设置超时的不同的是你可以在无条件启动的run loop里面使用该技术。
尽管移除run loop的输入源和定时器也可能导致run loop退出,但这并不是可靠的退出run loop的方法。一些系统例程会添加输入源到run loop里面来处理所需事件。因为你的代码未必会考虑到这些输入源,这样可能导致你无法没从系统例程中移除它们,从而导致退出run loop。
- iOS 如何创建一个线程,要求可以一直工作,不会执行一次就结束
- 如何保证工作线程就创建一次,永久适用
- 如何结束一个线程
- 如何结束一个线程
- 一个PHP一直执行的例子 不会计划任务可以用这个 PHP+jquery前台动态显示数据库内容
- 控制台创建两个线程,等待一个线程的结束,执行另外一线程
- 如何强制结束一个线程
- android 如何结束一个线程?
- android 如何结束一个线程?
- android 如何结束一个线程?
- 如何立即结束一个线程?
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- Java如何等待子线程执行结束
- 在查询分析器中执行update更新一个字段查询一直执行但不会成功
- PHP 文字水印,缩略图,图片水印实现类
- 算法导论第八章-线性时间排序-Cpp代码实现
- ecstore后台finder的取数据流程
- 【Leetcode】Rectangle Area
- 储存班长的学生类信息
- iOS 如何创建一个线程,要求可以一直工作,不会执行一次就结束
- DeepID算法实践
- 第13周项目1-分数类中的运算符重载(1)
- 【Leetcode】Palindrome Number
- nginx+php-fpm的session路径配置
- String int之间转换
- 数据结构之归并排序
- AndroidStudio快捷键汇总
- Select机制--