首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以同步方式触发多个不同的计时器?

如何以同步方式触发多个不同的计时器?
EN

Stack Overflow用户
提问于 2022-03-30 10:25:23
回答 1查看 53关注 0票数 0

我想要构建一个应用程序,在这里,用户会在一个定时器后面进行一行练习。他可以决定计时器的nb和每个定时器的值。它对一个定时器很好,但是当我有多个定时器时,我想以串行模式(fire timer1,只在完成timer2,等等)中触发它们。在这里,代码和我看到的是,在前面的结尾之前,定时器是一个接一个地异步触发的。我花了相当长的时间来寻找一种简单的方法来编写它(我不确定是否需要同步队列)。我检查了许多问题,但没有找到类似的回答。知道怎么做吗?

代码语言:javascript
复制
@IBOutlet weak var timerLabel: UILabel!

var timer = Timer()
var myTimers = [5, 10, 8]
var myTimeCheck = 0
var seconds = 0

@IBAction func launchTimersPressed(_ sender: UIButton) {

    for myTime in myTimers {
        
        let queue = DispatchQueue(label:"com.queue.serial")
        
        queue.sync {
            timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.updateChrono), userInfo: nil, repeats: true)
            
            print ("myTime = \(myTime)")
            myTimeCheck = myTime
        }
    }
}

@objc func updateChrono() {
    
    seconds += 1
    timerLabel.text = "\(seconds)"
    
    // checking if we arrive at end of time
    print("seconds and myTime: \(seconds) and \(myTimeCheck) ")
    if seconds == myTimeCheck {
        
        timer.invalidate()
        return     // to move out
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 12:53:00

不要尝试在同步队列中运行计时器。那太傻了。

看起来您的计时器每秒钟都会触发,并且总是调用相同的目标。所以,只要有一个定时器,不断地运行。它将是一个“检查当前练习的状态”计时器。

让var持有一个双倍数组,该数组指示每个练习的秒数。更好的是,有一组表示练习的结构。

当用户开始练习时,从数组中删除其结构,并将其保存在变量currentExercise中。

当用户开始特定的练习时,还计算一个exerciseCompletedTime TimeInterval

每次您的每秒一次计时器启动,看看当前的时间是否是≥≥.如果是,将该练习标记为已完成,从练习数组中删除下一个练习结构,将其设置为当前练习,并计算一个新的exerciseCompletedTime

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71675503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档