在我的Swift代码中,我有一个在辅助线程上运行的进程。其中有一个递归方法,我想每隔一段时间暂停一次或更短的时间。我希望我可以只说睡眠(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()
}
}
我的递归工作得很好,但我只是想偶尔放慢它的速度。我假设通过一些重构,我可以达到同样的效果,但是只需插入一个快速的小内联暂停将是如此简单。
发布于 2019-04-11 03:01:42
我要感谢Rob实际上回答了我的问题,他说要使用Thread.sleep。我试过了,但一开始似乎不起作用。然而,正如我告诉他的那样,我一直在尝试,最终我成功了。我不确定到底是“逗号”还是“句号”起了作用,因为我尝试了太多的变体。归根结底,我使用usleep
在暂停时获得更好的分辨率,因为sleep
必须是整数秒,而我希望小于1秒。尽管有关于首先使用暂停或从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
}
https://stackoverflow.com/questions/55579921
复制相似问题