如何停止一段时间后等待按键

问题描述 投票:0回答:1

我用这个代码在我的项目,但keyboard.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)
}

如果没有按键输出“键未按”,但在另一种情况下输出“您按下”和键名

go keyboard
1个回答
0
投票
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")
}
© www.soinside.com 2019 - 2024. All rights reserved.