dispatch_set_target_queue一些理解
来源:互联网 发布:弯尖美工钢笔推荐 编辑:程序博客网 时间:2024/05/22 00:43
发现一个很有意思的方法 dispatch_set_target_queue
他可以改变queue的优先级与目标queue相同
这段代码是搬过来的
dispatch_queue_t mySerialDispatchQueue =dispatch_queue_create("com.example.gcd.MySerialDispatchQueue", NULL);dispatch_queue_t globalDispatchQueueBackground =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);dispatch_set_target_queue(mySerialDispatchQueue, globalDispatchQueueBackground);
下边来看更有意思的,一般都是把一个任务放到一个串行的queue中,如果这个任务被拆分了,被放置到多个串行的queue中,但实际还是需要这个任务同步执行,那么就会有问题,因为多个串行queue之间是并行的。
那该如何是好呢?
这是就可以使用dispatch_set_target_queue了。
如果将多个串行的queue使用dispatch_set_target_queue指定到了同一目标,那么着多个串行queue在目标queue上就是同步执行的,不再是并行执行。
看代码:
- +(void)testTargetQueue {
- dispatch_queue_t targetQueue = dispatch_queue_create("test.target.queue", DISPATCH_QUEUE_SERIAL);
- dispatch_queue_t queue1 = dispatch_queue_create("test.1", DISPATCH_QUEUE_SERIAL);
- dispatch_queue_t queue2 = dispatch_queue_create("test.2", DISPATCH_QUEUE_SERIAL);
- dispatch_queue_t queue3 = dispatch_queue_create("test.3", DISPATCH_QUEUE_SERIAL);
- dispatch_set_target_queue(queue1, targetQueue);
- dispatch_set_target_queue(queue2, targetQueue);
- dispatch_set_target_queue(queue3, targetQueue);
- dispatch_async(queue1, ^{
- NSLog(@"1 in");
- [NSThread sleepForTimeInterval:3.f];
- NSLog(@"1 out");
- });
- dispatch_async(queue2, ^{
- NSLog(@"2 in");
- [NSThread sleepForTimeInterval:2.f];
- NSLog(@"2 out");
- });
- dispatch_async(queue3, ^{
- NSLog(@"3 in");
- [NSThread sleepForTimeInterval:1.f];
- NSLog(@"3 out");
- });
- }
猜不准怎么办?不发表这篇博客
实际输出:
- 2014-11-13 13:18:05.964 TUPIAN[2701:92951] 1 in
- 2014-11-13 13:18:08.965 TUPIAN[2701:92951] 1 out
- 2014-11-13 13:18:08.966 TUPIAN[2701:92951] 2 in
- 2014-11-13 13:18:10.967 TUPIAN[2701:92951] 2 out
- 2014-11-13 13:18:10.968 TUPIAN[2701:92951] 3 in
- 2014-11-13 13:18:11.969 TUPIAN[2701:92951] 3 out
总结:dispatch_set_target_queue可以设置queue的优先级,也可以使多个serial queue在目标queue上一次只有一个执行
0 0
- dispatch_set_target_queue一些理解
- dispatch_set_target_queue一些理解
- dispatch_set_target_queue
- dispatch_set_target_queue
- dispatch_set_target_queue
- iOS 浅谈dispatch_set_target_queue作用
- iOS dispatch_set_target_queue 详解
- GCD之dispatch_set_target_queue
- GCD学习笔记(四):dispatch_set_target_queue
- GCD swift dispatch_set_target_queue 小例
- GCD学习之——dispatch_set_target_queue
- 重新理解一些言论
- ajax的一些理解
- 堆栈的一些理解~~
- 一些琐碎的理解
- stdarg的一些理解
- const 的一些理解
- 理解了一些东西。。。
- 关于jquery easyui和bootstrap
- 对网页数据进行提取与分析
- 拓扑排序
- CentOS 7安装Etherpad(在线协作编辑)
- android5.0.1源代码下载链接
- dispatch_set_target_queue一些理解
- (转)2017中国互联网证券年度报告
- 农村信用社不良资产市场化处置方式
- Ubuntu 16.04 64位+anaconda2+opencv 3.2.0 + opencv_contrib 3.2.0
- c——const
- Mysql修改数据文件默认目录datadir
- linux驱动-file_operations之mmap
- grub2 linux等命令中不能使用环境变量
- svg -> text文本水平、垂直居中。文本垂直对齐方式