1

如何释放我的串行队列的块堆栈?我已经把异步执行的一些块放入队列中,并且在某些时候我想完全释放这个队列为空。我正在使用低级别dispatch_queue_t。可能吗?谢谢。空的和完全空闲的串行队列

+0

你想取消当前正在执行的块吗?基本上不能直接通过'dispatch_queue'完成,你需要使用像NSOperationQueue这样的更高级别的构造,否则你需要在你的调度队列执行中添加一个快速退出取消。 – gaige 2013-03-19 11:03:52

+0

我不认为“正在执行块”是正确的,因为我们正在谈论FIFO队列。假设我想释放队列,目前可能正在执行阻塞操作。我明白,如果当前正在执行的block不能被取消,那么如果这个block会完成执行,那就没事了。但是我想取消剩余的堆栈以供执行。快速退出取消是什么意思? – user500 2013-03-19 11:16:55

+0

调度队列中没有任何取消方法。所以,所有的块都会执行,并且在某个时间点会变成当前执行的。没有调度队列的冲洗机制。 – gaige 2013-03-19 11:29:45

回答

0

你正在使用什么样的队列?

是NSOperationQueue ??

然后-[NSOperationQueue cancelAllOperations]应该做的工作。

+0

抱歉没有更具体。我正在使用低级别的'dispatch_queue_t'。 – user500 2013-03-19 09:41:29

+0

从其他来源,我得到以下。请阅读这个。 “NSOperationQueue可以让你更好地控制你的操作是如何执行的,例如,你可以定义单个操作之间的依赖关系,这对于普通的GCD队列来说是不可能的,也可以取消已经在NSOperationQueue中入队的操作只要操作支持它),当你将一个块排入GCD调度队列时,它肯定会在某个时候执行。“ – Xcoder 2013-03-19 09:45:06

+0

是的,但我需要串行FIFO队列和'NSOperationQueue'不起作用。 – user500 2013-03-19 09:53:45