让线程休眠

如果任务处理完毕,最好让线程休眠,任务来了再唤醒它,在ios中你可以用以下2种方法。

1.使用pthread线程

pthread_mutex_lock 加锁

pthread_mutex_unlock 解锁

pthread_cond_broadcast 唤醒所有线程

pthread_cond_singal 唤醒任意等待的线程

pthread_cond_wait 解锁并进入等待状态


以下是apple文档的例子

 pthread_mutex_t mutex;

   pthread_cond_t condition;

 

Boolean     ready_to_go = true;

 

void MyCondInitFunction()

{

/**

*  初始化mutex,condition

**/

    pthread_mutex_init(&mutex);

    pthread_cond_init(&condition, NULL);

 

}

 

void MyWaitOnConditionFunction()

{

/**

* 加锁

**/

pthread_mutex_lock(&mutex);

/**

* 没有任务了,线程解锁,并进入等待状态

**/

    while(ready_to_go == false){

        pthread_cond_wait(&condition, &mutex);

    }

 

/**

* 此处是处理任务代码

*/

  ……

/**

* 处理完毕了

*/

    ready_to_go = false;

/**

* 解锁

**/

    pthread_mutex_unlock(&mutex);

 

}

 

void SignalThreadUsingCondition()

{

 

/**

  * 加锁

  **/

    pthread_mutex_lock(&mutex);

 

/**

  * 添加任务

  **/

  ……

 

  /**

  * 有任务了

  **/

    ready_to_go = true;

/**

  * 唤醒线程处理

  **/

     pthread_cond_signal(&condition);

/**

  * 解锁

  **/

     pthread_mutex_unlock(&mutex);

 

}

 

2.NSCondition类,是对pthreadcon的封装

NSCondition:lock 对应pthreadpthread_mutex_lock

NSCondition:unlock 对应pthreadpthread_mutex_unlock

NSCondition:broadcast 对应phreadpthread_cond_broadcast

NSConditon:singal 对应pthreadpthread_cond_singal

NSCondition:wait 对应pthreadpthread_con_wait

posted @ 2011-06-15 21:52  Delon  阅读(2093)  评论(0编辑  收藏  举报