fix stress demo (race on close)

This commit is contained in:
Garrett D'Amore 2024-03-03 15:01:32 -08:00
parent 2c305c06d7
commit b02dac3826
1 changed files with 27 additions and 29 deletions

View File

@ -23,7 +23,6 @@ package main
import ( import (
"fmt" "fmt"
"math/rand" "math/rand"
"os"
"time" "time"
"github.com/gdamore/tcell/v2" "github.com/gdamore/tcell/v2"
@ -38,28 +37,8 @@ func main() {
panic(err) panic(err)
} }
startTime := time.Now()
var frames int var frames int
go func() {
for {
event := screen.PollEvent()
if event, ok := event.(*tcell.EventKey); ok {
if event.Key() == tcell.KeyCtrlC || event.Key() == tcell.KeyESC {
break
}
}
}
screen.Fini()
duration := time.Since(startTime)
fps := int(float64(frames) / duration.Seconds())
fmt.Println("FPS:", fps)
os.Exit(0)
}()
type cell struct { type cell struct {
c rune c rune
style tcell.Style style tcell.Style
@ -97,9 +76,25 @@ func main() {
patterns = append(patterns, pattern) patterns = append(patterns, pattern)
} }
evCh := make(chan tcell.Event)
quitCh := make(chan struct{})
go screen.ChannelEvents(evCh, quitCh)
startTime := time.Now()
loop:
for { for {
for i := 0; i < len(patterns); i++ { select {
pattern := patterns[i] case event := <-evCh:
if event, ok := event.(*tcell.EventKey); ok {
if event.Key() == tcell.KeyCtrlC || event.Key() == tcell.KeyESC {
close(quitCh)
break loop
}
}
break
default:
}
pattern := patterns[frames%len(patterns)]
for h := 0; h < height; h++ { for h := 0; h < height; h++ {
for w := 0; w < width; w++ { for w := 0; w < width; w++ {
c := pattern[h][w] c := pattern[h][w]
@ -109,5 +104,8 @@ func main() {
screen.Show() screen.Show()
frames++ frames++
} }
} duration := time.Since(startTime)
screen.Fini()
fps := int(float64(frames) / duration.Seconds())
fmt.Println("FPS:", fps)
} }