子线程启用定时器

来源:互联网 发布:天使与魔鬼 知乎 编辑:程序博客网 时间:2024/06/01 21:59
//用NSObject的方法创建一个多线程    [self performSelectorInBackground:@selector(multiThread) withObject:nil];
- (void)multiThread{    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];    if (![NSThread isMainThread]) {                 // 第1种方式        //此种方式创建的timer已经添加至runloop中//        [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];        //保持线程为活动状态,才能保证定时器执行//        [[NSRunLoop currentRunLoop] run];//已经将nstimer添加到NSRunloop中了                 //第2种方式        //此种方式创建的timer没有添加至runloop中       NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];        //将定时器添加到runloop中        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];        [[NSRunLoop currentRunLoop] run];        NSLog(@"多线程结束");    }     [pool release];} - (void)timerAction{    //定时器也是在子线程中执行的    if (![NSThread isMainThread]) {        NSLog(@"定时器");    }}



-(void)startThreadButtonPressed{progress.progress = 0.0;showValue.text = @"0.0";startThread.hidden = YES;//该语句会让主线程堵塞2秒,这就是为什么要将耗时操作放在子线程的原因之一//[NSThread sleepForTimeInterval:2];//开启一个新线程[NSThread detachNewThreadSelector:@selector(doJobInBackground) toTarget:self withObject:nil];}//子线程,后台执行工作-(void)doJobInBackground{//睡眠,模拟子线程中耗时操作[NSThread sleepForTimeInterval:2];//通知主线程执行更新操作[self performSelectorOnMainThread:@selector(invalidateProgress) withObject:nil waitUntilDone:NO];}


0 0
原创粉丝点击