https://github.com/klkblake/Go-SDLを使用してgoでSDLアプリを作成しようとしています。
描画関数を呼び出すタイマーを作成しました。
render_timer := time.NewTicker(time.Second / 60)
イベントループのどこか:
for running == true {
[...]
[process sdl events]
[...]
select {
case <-render_timer.C:
call_my_draw_function()
default:
some_default_actions()
}
[...]
}
このコードをコンパイルした後にプログラムを実行すると、画面に何も表示されません。しかし、私がちょうど置くならば:
fmt.Println("default")
selectのデフォルトのブランチで-コードは私が望むように動作し始めます(ウィンドウに何かを描画します); printlnを削除しても、何も描画されません。
私は何が間違っているのですか?なぜそのようなselectの動作があるのですか?
うーん...最も単純なテストケースは次のとおりです。
package main
import (
"fmt"
"time"
)
func main() {
rt := time.NewTicker(time.Second / 60)
for {
select {
case <-rt.C:
fmt.Println("time")
default:
}
time.Sleep(1) // without this line 'case <-rt.C' is never executed
}
}