ゴルーチンを使用して単純なクロック信号を作成しました。
func clockloop(ch chan byte) {
count := 0
for {
time.Sleep(FRAMELEN)
count++
innerfor:
for count {
select {
case ch <- 1:
count--
default:
break innerfor
}
}
}
}
func MakeClock() chan byte {
clock := make(chan byte)
go clockloop(clock)
return clock
}
この時計が不正確であることは知っていますが、それは関係ありません。私が知りたいのは、このゴルーチンを停止する最良の方法は何ですか?
理想的には、チャネルのリスナーが範囲外になるとすぐに停止することを望んでいましたが、その方法を知っています (ガベージ コレクターに似ていますが、ゴルーチン用です)。私はそれを手動で停止する 2 つの方法を考え出しました: (1) そのようなすべてのゴルーチンがすべてのループをチェックするグローバルな停止変数を使用する方法と、(2) 停止チャネルを使用する方法です。これらのそれぞれの欠点は、ゴルーチンを手動で停止する必要があることです。