有人可以在以下方面帮助我: 我有一个FOR,里面有一些计时器
我的意图是,最初它为第一个索引运行TIMER,并且只有在取消计时器之后,该方法才转到下一个计时器。我的FOR需要等待TIMER完成。
/plugins
我的输出
/src
我希望我的输出是
for (i in 1..3) {
println("running for loop: $i")
val interval: Long = 60 * 1000 * 1 // 1 minute
val timer = Timer("timer: $i", true)
timer.schedule(100, interval) {
println("${LocalTime.now()} to loop: $i")
// some logic here do stop the timer
// if (something happens) timer.cancel()
}
}
答案 0 :(得分:1)
我有一个FOR,里面有一些计时器
此语句是错误的,java.util.Timer是一个实用程序类,可用于安排将来某个时间执行的线程。
closeAddModal = (el) => {
console.log(el.target.getAttribute('name'))
this.setState({
addAppModal: false
})
var layouts = this.state.layouts;
layouts.lg.push({ i: 'b', x: 6, y: 0, w: 6, h: 6.45 })
// layouts.md.push({i: 'b', x:6, y:0, w:5, h:4.35})
this.setState({
layouts: layouts
}, () => {
console.log(this.state.layouts)
}
)
}
上面的行没有阻塞for循环,计时器计划在线程上运行,并且for循环继续进行下一次迭代。
您可能需要一个阻塞解决方案来逐个执行它们
timer.schedule(100, interval) {}
但这可能不是最佳实践,因为您的线程刚刚被阻塞,您可以使用协程来做到这一点,而不会通过阻塞线程而浪费您的系统资源:
for (i in 1..3) {
println("running for loop: $i")
val interval: Long = 60 * 1000 * 1 // 1 minute
Thread.sleep(100)
var isRunning = true
while(isRunning) {
println("${LocalTime.now()} to loop: $i")
Thread.sleep(interval)
// some logic here do stop the timer
// if (something happens) isRunning = false
}
}