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 创建FIFO队列及信号量)