按钮点击iphone停止异步调度队列

时间:2013-07-06 06:57:52

标签: iphone ios grand-central-dispatch

一旦我开始一个队列,它需要将近3-4分钟,如果我想在一个按钮(取消按钮)上停止此队列,那么我可以这样做吗?如果是,那么如何?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        @synchronized(self)
        {
            for (int i = 0; i < (4000); i++) {
                         (Some methods)
            }
        }
});

我可以停止或关闭此帖子吗?

2 个答案:

答案 0 :(得分:2)

首先不要在gcd块中同步。 改为使用串行队列。

话虽如此,没有办法阻止gcd阻止,但有一种解决方法。 在你的队列中你有一个循环: 使用布尔标志,您只需退出循环并基本上终止gcd块。

查看示例here

答案 1 :(得分:1)

您的第一个问题是您通过执行dispatch_ 同步

来阻止主线程

但作为对你问题的回答:

你应该使用NSOperationQueue。可以在操作之间轻松暂停

脱离我的头顶:

NSOperationQueue *_myQueue; //instance var

_myQueue = [[NSOperationQueue alloc] init]; //init it

_myQueue.suspended = (buttonPressed) ? YES : NO; //toggle it like you need

for (int i = 0; i < (4000); i++) {
   [_queue addOperationWithInvocation:NSInvocation for method to call];  
}