swift - 停止在主线程上运行的 DispatchQueue

标签 swift grand-central-dispatch dispatch-queue

我有这段代码:

    DispatchQueue.main.asyncAfter(deadline: .now() + (delay * Double(isDelayAccounted.hashValue)) + extraDelay) {
        self.isShootingOnHold = false
        self.shoot()
        self.shootingEngine = Timer.scheduledTimer(timeInterval: (Double(60)/Double(self.ratePerMinute)), target: self, selector: #selector(ShootingEnemy.shoot), userInfo: nil, repeats: true)   
    }

现在,我希望能够停止该线程的执行。我怎样才能阻止它被执行?例如,3 秒后,我决定不再执行它,所以我想停止它。

最佳答案

您可以使用 DispatchWorkItem。它们可以在 DispatchQueue 上安排并在执行前取消。

let work = DispatchWorkItem(block: {
    self.isShootingOnHold = false
    self.shoot()
    self.shootingEngine = Timer.scheduledTimer(timeInterval: (Double(60)/Double(self.ratePerMinute)), target: self, selector: #selector(ShootingEnemy.shoot), userInfo: nil, repeats: true)
})
DispatchQueue.main.asyncAfter(deadline: .now() + (delay * Double(isDelayAccounted.hashValue)) + extraDelay, execute: work)
work.cancel()

关于swift - 停止在主线程上运行的 DispatchQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633729/

相关文章:

ios - 您如何快速访问用户联系人的电话号码?

Swift 使用协议(protocol)扩展默认值

ios - 使用 dispatch_async,使用你自己的单独队列还是你自己的全局队列?

ios - 快速线程化多个任务?

ios - 如果当前线程相同,如何传递 block

ios - Playground - DispatchQueue.main.asyncAfter 不工作

ios - 当我的 tableview 中没有要显示的数据时,如何显示返回消息?

ios - 如何处理 Swift 中的竞争条件读/写问题?

ios - 如何在ios6中的tableview之后加载tableview中的图像

swift - 如何将 JSON 代码解析为 Swift 3 TableView 数据?