0

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

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

我可以停止或关闭此线程吗?

4

2 回答 2

2

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

话虽如此,没有办法停止 gcd 块,但有办法绕过它。在您的队列中,您有一个循环:使用布尔标志,您可以简单地退出循环并基本上终止 gcd 块。

在此处查看示例

于 2013-07-06T07:17:48.043 回答
1

您的第一个问题是您通过执行 dispatch_sync 阻塞主线程

但作为对您问题的回答:

你应该使用 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];  
}
于 2013-07-06T08:21:15.927 回答