在我的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()
}
}
我的递归效果很好,但我只是偶尔想放慢一点。我认为通过一些重构,我可以达到同样的效果,但是插入一个快速的内联暂停会非常简单。
答案 0 :(得分:0)
我想称赞Rob通过说使用Thread.sleep来回答我的问题。我试过了,但是起初似乎没有用。但是,正如我告诉他的那样,我不断尝试,最终使它起作用。不确定到底是哪个“逗号”或“句号”真正起作用了,因为我尝试了很多变体。底线是我使用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
}