zoukankan      html  css  js  c++  java
  • 解析在iPhone应用中NSThread创建Run Loop

    iPhone应用中NSThread创建Run Loop是本文要介绍的内容,虽然iphone为我们提供了很多简单易于操作的线程方法。 
    IPhone多线程编程提议用NSOperation和NSOperationQueue,这个确实很好用。 
    但是有些情况下,我们还是在运行一些长线任务或者复杂任务的时候需要用比较原始的NSThread。这就需要为NSThread创建一个run loop. 
    [pre]NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(playerThread: ) object:nil];  

      1. [thread start];  

    //如果要利用NSOperation,原理类似。只需要加入到queue里面去就好了。。queue会在合适的时机调用方法,下面代码作为参考。

    - (void) playerThread: (void*)unused   

    {   

    audioRunLoop = CFRunLoopGetCurrent();//子线程的runloop引用  

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];//子线程的  run loop

    [self initPlayer];

    CFRunLoopRun(); //运行子线程的  run loop,这里就会停住了。

    [pool release];  

    }

     

    // 实现一个timer,用于检查子线程的工作状态,并在合适的时候做任务切换。或者是合适的时候停掉自己的  run loop

    -(void) initPlayer {   

    // 在这里你可以初始化一个工作类,比如声音或者视频播放   

    NSTimer *stateChange = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:  

       @selector(checkStatuserInfo:nil repeats:YES];  

    }  

    -(void) checkState:(NSTimer*) timer   

    {   

    if(需要退出自线程了) {  

    //释放子线程里面的资源  

    CFRunLoopStop( CFRunLoopGetCurrent());//结束子线程任务  }   

    }

  • 相关阅读:
    进程和线程的主要区别
    Mysql 指定字段数据排序 以及django的实现
    java String
    阿里云 邮件发送(Python)
    Python实现类似JavaScript 的Json对象
    JAVA 学习笔记
    记录一个MySql 分区表+Gap锁引起插入超时的案例
    ThreadPoolExecutor源码中的适配器模式
    Oracle 查询真实执行计划
    简单分析FactoryBean
  • 原文地址:https://www.cnblogs.com/iOSJason/p/4084368.html
Copyright © 2011-2022 走看看