Ja, du hast Recht, da hatte ich was falsch interpretiert:
In den printf-Ausgaben kommt meistens ziemlich schnell nach ESC-Tastendruck das ESC als Sequenz
^[
auf den terminal-Screen.
Ich dachte, das wäre identisch mit dem Zeitpunkt, in dem auch kbhit() und getchar() das ESC lesen (dass die also für das Echo verantwortlich wären), wodurch es dann auf stdout ausgegeben wird, und dann wird ja ohne Verzögerung (keine 1000ms später, sondern sofort!) in die if-Schleife eingesprungen und das pthread_cancel dann auch sofort ausgelöst.
Sehen konnte man aber, dass zwischen ^[ und dem Programmende noch etliche Zeilen von (zig) rekursiven Fibonacci-Berechnungen ausgeführt und ausgegeben werden.
Nach dem Test mit msleep(10) kommt der Abbruch allerdings jetzt wirklich unmittelbar.
Tatsächlich scheint es dann aber so zu sein, dass das kbd-Echo ^[ vom ESC-Tastendruck schneller kommt, als kbhit() oder getchar() davon Kenntnis kriegen, und daher habe ich diese Verzögerung völlig falsch interpretiert. Offenbar macht das kbd-Echo ein von meinem Programm völlig unabhängger Linux-Betriebssystem-Thread oder Daemon, oder wie ist das zu erklären?
Lesezeichen