Python Curses Nodelay Getch не отвечает

Этот код выполняется в течение 1 миллиона итераций (около нескольких секунд на моей машине), однако, когда я удерживаю кнопку, количество итераций, когда я удерживаю ее, существенно не увеличивается.

import curses


stdscr = curses.initscr()
curses.cbreak()
curses.noecho()
stdscr.nodelay(1)

num_iters_nochar = 0
num_iters_char = 0

for i in range(10**6):
    if stdscr.getch() == -1:
        num_iters_nochar += 1
    else:
        num_iters_char += 1




curses.nocbreak()
curses.echo()
curses.endwin()
print num_iters_nochar , 'iterations with no input'
print num_iters_char , 'iterations with input'

Почему nodelay getch() не точно фиксирует нажатие кнопки?


person Ankur Banerjee    schedule 19.09.2017    source источник


Ответы (1)


Потому что nodelay буквально без задержки. И если ваша частота повторения клавиатуры не очень высока, будут некоторые итерации цикла, когда getch истечет время ожидания и не даст ввода, что было бы нормальным.

Я получаю:

999742 iterations with no input
258 iterations with input

Что кажется разумным для 11 секунд. Моя клавиатура ни за что не повторит нажатие клавиши 1 миллион раз за 11 секунд, а если бы это произошло, то было бы невозможно использовать клавиатуру для чего-либо, кроме нажатия всех гетчей в этой программе, поскольку ей пришлось бы считать ~99 000 клавиши в секунду, что сделало бы набор текста действительно болезненным. Так что, короче, ваши цифры в норме.

person Carl    schedule 19.09.2017