ios – dispatch_set_target_queue如何工作?

由于dispatch_set_target_queue缺少材料,我来这里寻求帮助,谢谢!

这是我的测试代码:

dispatch_queue_t mySerialDispatchQueue1 = dispatch_queue_create("come.itenyh",NULL);
dispatch_queue_t mySerialDispatchQueue2 = dispatch_queue_create("come.itenyh1",NULL);

dispatch_set_target_queue(mySerialDispatchQueue1,mySerialDispatchQueue2);

dispatch_async(mySerialDispatchQueue1,^{[self task:@"s1"];});

dispatch_async(mySerialDispatchQueue2,^{[self task:@"p1"];});

dispatch_async(mySerialDispatchQueue1,^{[self task:@"s2"];});

- (void)task:(NSString *)taskid
{

        NSLog(@"Now executing taskid:%@",taskid);

        [NSThread sleepForTimeInterval:5];

}

现在,如果我设置

dispatch_set_target_queue(mySerialDispatchQueue2,mySerialDispatchQueue1);

然后结果是:

2014-04-16 22:23:49.581 ITGCDLearning[66758:1303] Now executing taskid:s1
2014-04-16 22:23:54.585 ITGCDLearning[66758:1303] Now executing taskid:s2
2014-04-16 22:23:59.586 ITGCDLearning[66758:1303] Now executing taskid:p1

而相反,如果我设定

dispatch_set_target_queue(mySerialDispatchQueue1,mySerialDispatchQueue2);

然后结果是:

2014-04-16 22:28:37.910 ITGCDLearning[66795:1303] Now executing taskid:s1
2014-04-16 22:28:42.913 ITGCDLearning[66795:1303] Now executing taskid:p1
2014-04-16 22:28:47.915 ITGCDLearning[66795:1303] Now executing taskid:s2

我知道dispatch_set_target_queue函数可以

>更改队列的priorty
>创建调度队列的层次结构.

我认为这是导致我的代码结果的第二点,但并不真正了解具体细节.有人可以向我解释一下吗?

解决方法

根据我的说法,当你将目标队列设置为其他队列时,你正在同步队列的任务
在第一种情况下:
dispatch_set_target_queue(mySerialDispatchQueue2,mySerialDispatchQueue1);

mySerialDispatchQueue1是目标队列,因此mySerialDispatchQueue2中添加的所有任务也从mySerialDispatchQueue1中排队.因为它是目标队列.所以mySerialDispatchQueue1已经有两个任务,所以稍后会添加队列mySerialDispatchQueue2中的另一个任务.

在第二个案例中:

dispatch_set_target_queue(mySerialDispatchQueue1,mySerialDispatchQueue2);

你的目标队列是mySerialDispatchQueue2所以在没有任务的开始时,mySerialDispatchQueue1中的任务被添加到mySerialDispatchQueue2中,然后它自己的任务就在队列中.所以以这种方式增加了任务.

以上是来客网为你收集整理的ios – dispatch_set_target_queue如何工作?全部内容,希望文章能够帮你解决ios – dispatch_set_target_queue如何工作?所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。