Правильно обрабатывать сигналы KeyboardEvent и Interval - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть консольное приложение Go, которое должно обрабатывать события клавиатуры, а также обрабатывать вещи с фиксированным интервалом.

Вот код, который я сейчас делаю для обработки событий

eventloop:
    for {
        switch ev := termbox.PollEvent(); ev.Type {
        case termbox.EventKey:
            switch ev.Key {
            case termbox.KeyEsc:
                Save()
                break eventloop
            default:
                HandleInputKey(ev)
            }
        case termbox.EventError:
            panic(ev.Err)
        }
        select {
        case <-regRefreshTick:
            Sync()
        case <-terminalCloseSignal:
            break eventloop
        case <-tick:
            Render()
            continue
        }
    }

Но syn c / опросы клавиатуры работают гладко.

Поведение 1 Иногда событие клавиатуры работает как положено, а иногда обработка событий клавиатуры задерживается. Критическим моментом является то, что когда я перемещаю фокус на другие приложения и возвращаюсь к терминалу, события клавиатуры обрабатываются сумасшедшим образом. Дело в том, что когда я обрабатываю 1, обработка событий для 1 не работает, а если я нажимаю 2, он обрабатывает и 1, и 2.

Поведение 2
Обновление через фиксированный интервал с помощью галочки не работает, как ожидалось. Иногда он обрабатывает несколько обновлений одновременно, а иногда не запускает refre sh, хотя я жду долго.

Вопрос
Я просто хочу знать, если код правильная практика и где-то еще есть проблема или если код совершенно не соответствует действительности.

...