2017-09-19 2 views
1

Dieser Code läuft für 1 Million Iterationen (etwa ein paar Sekunden auf meinem Rechner), aber wenn ich eine Taste gedrückt halte, werden die # Iterationen, die ich gedrückt halte, nicht wesentlich erhöht.python curses nodelay getch nicht reagiert

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' 

Warum erfasst der Knotenlayer getch() den Tastendruck nicht genau?

Antwort

0

Weil nodelay ist buchstäblich keine Verzögerung. Und wenn die Wiederholrate der Tastatur nicht wirklich hoch ist, wird es einige Iterationen der Schleife geben, wenn die getch abläuft und keine Eingabe liefert, was normal wäre.

Für mich erhalte ich:

999742 iterations with no input 
258 iterations with input 

, die für 11 Sekunden sinnvoll erscheint. Es gibt keine Möglichkeit, dass meine Tastatur eine Taste in 11 Sekunden 1 Million Mal wiederholt, und wenn es so wäre, wäre es unmöglich, die Tastatur für irgendetwas anderes zu benutzen, als alle Geche in diesem Programm zu treffen, da es ~99 000 Schlüssel pro Sekunde zählen müsste. was das Tippen sehr schmerzhaft machen würde. Kurz gesagt, deine Zahlen sind normal.