1

很容易延迟执行这样的事情

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    <#code to be executed on the main queue after delay#>
});

但是如果再放一个更长的延迟,就会导致上面的代码无法执行

double delayInSeconds2 = 3.0;
dispatch_time_t popTime2 = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds2 * NSEC_PER_SEC);
dispatch_after(popTime2, dispatch_get_main_queue(), ^(void){
    <#code to be executed on the main queue after delay#>
});

为什么只执行较长的而不是两者?还是我完全错了?

4

1 回答 1

0

它是一个队列,但位置取决于未来的触发时间而不是入队时间。

如果第二个是 1 秒,它将在第一个之前插入。

如果您希望它们同时执行(单核的时间片或多核 cpu 的实际并发),请将它们放在不同的队列中。

于 2014-03-25T10:15:56.003 回答