gpt4 book ai didi

快速停止循环并使用按钮继续

转载 作者:行者123 更新时间:2023-11-28 15:28:52 24 4
gpt4 key购买 nike

是否有可能停止 for in 循环并使用按钮继续它和停止的位置。

我的意思是这样的:

for x in 0..<5 {

if x == 3 {
// show a button
// this button have to be pressed
// which do some tasks
// when all tasks are finished >
// continue this loop at the stopped point
}
}

这可能吗?如果是,怎么办?

最佳答案

简答:使用信号量

更长的答案:

您的情况是更一般情况下如何暂停某些计算、保存其当前状态(局部变量、调用堆栈等),然后从同一点恢复它并恢复所有状态的示例。

一些语言/系统提供协程来支持这一点,其他语言/系统提供更深奥的当前延续调用,您(当前)Swift 都无法使用...

您所拥有的是 Grand Central Dispatch (GCD),它在 Swift 中通过 Dispatch 提供,它支持执行并发异步任务以及它们之间的同步。 pthread 等其他并发机制也可用,但倾向于推荐 GCD。

使用 GCD 的解决方案概要是:

  • 将循环作为异步并发任务执行。它必须在主线程上执行,否则你会死锁...
  • 当你想暂停时:
    • 创建一个信号量
    • 启动另一个异步任务以显示按钮、运行其他作业等。这个新任务必须在完成时发出信号信号量。新任务可能会调用主线程来执行UI操作。
    • 您的循环任务等待信号量,这将阻塞循环任务,直到按钮任务发出信号为止。

这听起来可能很复杂,但使用 Swift block 语法和 Dispatch 就非常简单。但是,您确实需要先阅读 GCD!

或者,您可以询问是否可以将您的解决方案重组为多个部分,这样就不需要保存/恢复当前状态。您可能会发现诸如continuation passing style 之类的设计很有用,使用 Swift 的 block 也很容易。

HTH

关于快速停止循环并使用按钮继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44935036/

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