GCD 创建FIFO队列及信号量

今天项目需要创建一个FIFO队列,以前是自己写来实现,这次想通过GCD来做,写完后,感觉很是方便。

大概需求:UI界面可以不停的点击Button,然后进行不同操作的语音提示。一段语音结束了才能开始下段语音。上重要代码,走起。

1 创建dispatch_queue_t 

_soundQueue=dispatch_queue_create("com.dispatch.playSound",DISPATCH_QUEUE_SERIAL);

2 �给UI界面提供往队列添加数据接口

- (void)addText:(NSString*)text {

        dispatch_async(_soundQueue, ^{

                [self playSound:text];

        });

}

3 在playSound中创建信号量

_semaphore=dispatch_semaphore_create(0);

........

设置:AVSpeechSynthesizer的delegate

播放声音:[AVSpeechSynthesizer speakUtterance]

等待信号量释放:dispatch_semaphore_wait(_semaphore,DISPATCH_TIME_FOREVER);

4 在AVSpeechSynthesizer的delegate的didFinishSpeechUtterance中,释放信号量dispatch_semaphore_signal(_semaphore);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • GCD笔记 总结一下多线程部分,最强大的无疑是GCD,那么先从这一块部分讲起. Dispatch Queue的种类...
    jins_1990阅读 793评论 0 1
  • 一、多线程简介: 所谓多线程是指一个 进程 -- process(可以理解为系统中正在运行的一个应用程序)中可以开...
    寻形觅影阅读 1,098评论 0 6
  • GCD (Grand Central Dispatch) :iOS4 开始引入,使用更加方便,程序员只需要将任务添...
    池鹏程阅读 1,368评论 0 2
  • 谈到iOS多线程,一般都会谈到四种方式:pthread、NSThread、GCD和NSOperation。其中,苹...
    攻城狮GG阅读 289评论 0 3
  • “你身边的人有太多,但真心陪伴没几个,唯独只会有那一个,陪你日升日落…………”。耳机里还在循环播放着,而窗外还下着...
    荒凉清久阅读 1,250评论 0 0