让我们以GoTour为例,它说明了我仅在有事件时才处理SDL事件的问题。
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8)
boom := time.After(5e8)
for {
select {
case <-tick:
fmt.Println("tick.")
case <-boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(" .")
time.Sleep(5e7)
}
}
}
这行得通。但是,如果我不想在默认情况下打印或休眠,而只想保持循环,该怎么办?我尝试了这个:
case <-boom:
fmt.Println("BOOM!")
return
default: // Nothing here.
}
}
}
但它阻止了。
我在这里和那里看到过有关goroutine调度的句子,但我不理解。所以我想我有两个问题:
1)为什么会阻塞?
2)如何使它不阻塞不执行任何操作?
桃花长相依
相关分类