问题
点击操作向一个队列里面添加播放音乐方法,如何实现一段音乐播放完成后,立马播放队列里下段音乐
定义
1、信号量:就是一种可用来控制访问资源的数量的标识,设定了一个信号量,在线程访问之前,加上信号量的处理,则可告知系统按照我们指定的信号量数量来执行多个线程。
其实,这有点类似锁机制了,只不过信号量都是系统帮助我们处理了,我们只需要在执行线程之前,设定一个信号量值,并且在使用时,加上信号量处理方法就行了。
方法
//创建信号量,参数:信号量的初值,如果小于0则会返回NULL
dispatch_semaphore_create(信号量值)
//等待降低信号量
dispatch_semaphore_wait(信号量,等待时间)
//提高信号量
dispatch_semaphore_signal(信号量)
思路
- 初始化 self.semaphore = dispatch_semaphore_create(1); 为1
- 在点击事件里先dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER),检测上一个音频是否播放完毕,如何没有播放完毕(信号量为0),不会执行后面代码
- 音乐播放完毕的回调中,加入dispatch_semaphore_signal(self.semaphore) 增加信号量
参考链接:ConnorLin's Blog
网友评论