信号量在使用中有几个方法比较重要:
dispatch_semaphore_create 创建一个信号量
dispatch_semaphore_wait 信号量等待,一直到资源可用
dispatch_semaphore_signal 发送一个信号量获取信号量资源
在初始化方法中:
q1 = dispatch_queue_create("com.fwzhengwei.www", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(q1, ^{
sem = dispatch_semaphore_create(1);
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1.0*NSEC_PER_SEC);
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
NSLog(@"%@ %d", [NSThread currentThread], 0);
});
button1响应
-(void)buttonaction1{
NSLog(@"signal sem");
dispatch_semaphore_signal(sem);
}
button2响应
-(void)buttonaction{
NSLog(@"启动一个信号量请求");
dispatch_async(q1, ^{
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1.0*NSEC_PER_SEC);
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
NSLog(@"%@ %d", [NSThread currentThread], 0);
});
}
这里必须要先点击button1,然后再点击button2,这个时候sem信号量的资源才是可用的。
dispatch_semaphore_wait 可以自定义延迟时间
还有给代码设定延迟时间也是经常使用的
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
<#code to be executed after a specified delay#>
});
dispatch_get_global_queue 使用全局信号量还可以有效的使用手机中的多核资源。