簡體   English   中英

如何在 Swift 中暫停后台線程

[英]How to Pause a Background Thread in Swift

在我的 Swift 代碼中,我有一個在輔助線程上運行的進程。 其中有一個遞歸方法,我想每隔一段時間暫停一秒鍾或更短時間。 我希望我可以只說 sleep(0.5) 但這當然太容易了。 順便說一句,任何想告訴我暫停不好的人都不必費心。 我知道各種問題。

該過程以DispatchQueue.global(qos: .utility).async { }

它對在DispatchQueue.main.async { }中完成的一些 UI 調用進行回調

有沒有人有一個很好的小方法在代碼中的特定點暫停和恢復線程,例如:

func myMethod() {
    for n in 1...100 {
        do some stuff
        callback(parameters)
        based on some logic possibly Thread.pause
        recursively call myMethod()
    } 
}

我的遞歸工作得很好,但我只是想偶爾放慢速度。 我假設通過一些重構我可以達到相同的效果,但插入一個快速的小內聯暫停會非常簡單。

我想通過說使用 Thread.sleep 來感謝 Rob 實際回答了我的問題。 我試過了,但一開始似乎不起作用。 然而,正如我告訴他的那樣,我一直在努力,最終我讓它發揮了作用。 不確定究竟是哪個“逗號”或“句號”真正起作用了,因為我嘗試了很多變體。 最重要的是,我使用usleep來獲得更精細的暫停分辨率,因為sleep必須是整數秒,而我想要不到一秒。 盡管有關於首先使用暫停或從 for 循環內部遞歸的警告,但以下代碼完全按需要工作:

視圖控制器

    object.callback = { () -> () in
        DispatchQueue.main.async {
            self.otherView.setSomeUI()
        }
    }


    DispatchQueue.global(qos: .background).async() {
        if self.object.method() { print("done") }
        else { print("error") }
    }

目的

private func method() -> Bool
{
    if conditionA { return true } // done
    if conditionB {
        if method() { return true }
    } else {
        for n in 1...N {
            if test() {
                self.callback?() 
                usleep(x) 
                if self.method() {
                    return true
                } else {
                    self.callback?() 
                }
            }
        }
    }
    return false
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM