[英]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.