gpt4 book ai didi

ios - 如果执行操作时间过长,则退出无限循环

转载 作者:搜寻专家 更新时间:2023-11-01 05:56:43 24 4
gpt4 key购买 nike

我有一个发送命令然后在无限循环中使用完成回调从USB设备读取数据的函数:

func dump(success: (() -> Void)? = nil, failure: (()->Void)? = nil) {
HIDDevice.sharedInstance.sendCommad(command: "dump")
while true {
for data in HIDDevice.sharedInstance.readBuf {
if data == "dumpcomplete":
success?()
return
}
}
}

我需要检查这个 while 循环是否在 > 1 秒内工作并且没有成功,然后调用 failure 闭包并停止循环。

我尝试在循环之前使用它,但没有帮助。循环线程 block 。

func setTimeout(delay:TimeInterval, block:@escaping ()->Void) -> Timer {
return Timer.scheduledTimer(timeInterval: delay, target: BlockOperation(block: block), selector: #selector(Operation.main), userInfo: nil, repeats: false)
}

let handle = setTimeout(1, block: { () -> Void in
failure()?
return
})

最佳答案

虽然我不认为这样的“繁忙循环”是个好主意,但我对 HIDDevice 一无所知,所以我无法提供这种循环的替代方法。所以这个答案只解决了如何在 1 秒后退出 while 循环的直接问题。

一个可能的解决方案是计算一个时间间隔并检查每次:

func dump(success: (() -> Void)? = nil, failure: (()->Void)? = nil) {
HIDDevice.sharedInstance.sendCommad(command: "dump")
let deadline = Date.timeIntervalSinceReferenceDate + 1 // add one second from now
while Date.timeIntervalSinceReferenceDate < deadline {
for data in HIDDevice.sharedInstance.readBuf {
if data == "dumpcomplete":
success?()
return
}
}
}

这会计算 future 的时间间隔,并根据该 future 值检查当前时间。一旦该时间过去,while 循环将退出。

关于ios - 如果执行操作时间过长,则退出无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com