Как перестать ждать нажатия клавиши через некоторое время - PullRequest
0 голосов
/ 03 февраля 2019

Я использую этот код в своем проекте, но клавиатура. GetSingleKey () ожидает нажатия клавиши.Как заставить функцию не ждать нажатия клавиши и вернуть ноль (например, через 1 секунду)?

package main

import (
    "fmt"
    "github.com/eiannone/keyboard"
)
func main() {
    char, _, err := keyboard.GetSingleKey()
    if (err != nil) {
         panic(err)
    }
    fmt.Printf("You pressed: %q\r\n", char)
}

Если клавиша не была нажата, выведите «Клавиша не была нажата», а в другом случае выведите «Вы нажали: "и имя ключа

1 Ответ

0 голосов
/ 03 февраля 2019
func getKeyTimeout(tm time.Duration) (ch rune, err error) {
if err = keyboard.Open(); err != nil {
    return
}
defer keyboard.Close()

var (
    chChan  = make(chan rune, 1)
    errChan = make(chan error, 1)
)

go func(chChan chan<- rune, errChan chan<- error) {
    ch, _, err := keyboard.GetSingleKey()
    if err != nil {
        errChan <- err
        return
    }
    chChan <- ch
}(chChan, errChan)

select {
case <-time.After(tm):
    return 0, err
case ch = <-chChan:
case err = <-errChan:
}

return
}

ch, err := tools.GetKey(time.Millisecond * n)
if err != nil {
    panic(err)
}
if ch != rune(0) {
    fmt.Printf("You pressed: %q\r\n", ch)
} else {
      fmt.Printf("Key was not pressed")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...