Seite 1 von 1

Endlos Programm abbrechen

Verfasst: Fr Aug 20, 2021 5:18 pm
von darkwin
Hallo, ich habe ein Programm das so lange laufen soll bis ich eine bestimmte Taste drücke.
Bisher habe ich nur Beispiele gefunden bei dem etwas abgefragt wird und das Programm so lange wartet bis eine Eingabe erfolgt.

Re: Endlos Programm abbrechen

Verfasst: Sa Aug 21, 2021 10:31 am
von Xin
Üblicherweise warten Konsolenprogramme bis eine Eingabe erfolgt - also werden Ein- (und Ausgaben) in der Regel gepuffert.
Programme wie beispielsweise Texteditoren müssen die Eingabe einer einzelnen Taste jedoch mitbekommen. Ich bin mir sicher, dass man das durch das Abschalten des Eingabepuffers realisieren kann, aber das ganze wird dann schon ein bisschen tricky.

Ich weiß, dass das mit der Curses-Bibliothek (bzw. NCurses) realisiert ist. Da würde ich mal gucken.

Bei einem Programm mit Fenster ist das natürlich kein großes Problem.

Re: Endlos Programm abbrechen

Verfasst: Mo Aug 23, 2021 6:51 pm
von darkwin
Hi, danke ich schau mir das an.

Wie macht das wohl top?
Das Programm wird gestartet und zeigt mir die Prozesse an.
Ich kann aber die Ausgabe verändern indem ich eine Taste drücke ohne dass das Program pausiert.
Da muss es doch etwas geben.

Die Frage ist wie muss ich meine Frage stellen damit ich eine Antwort finde.
Es könnte sein das ich eine Antwort gefunden habe. Ich muss es noch ausprobieren.

https://stackoverflow.com/questions/448 ... oard-input

Re: Endlos Programm abbrechen

Verfasst: Di Aug 24, 2021 10:31 am
von Xin
darkwin hat geschrieben:
Mo Aug 23, 2021 6:51 pm
Hi, danke ich schau mir das an.

Wie macht das wohl top?
Ich vermute mit ncurses.

top heißt, wir reden tatsächlich von Linux. Dann würde ich mir ncurses auch tatsächlich ansehen.
Damit lässt sich eine komplette Fensterverwaltung in der Konsole einrichten.

Hier müsste ich zu Hause auch Beispielprogramme haben, weil ich mal angefangen habe, meinen Text-Editor auf die Linux-Konsole zu bringen - aber wegen Zeitmangels auch sehr früh das Projekt wieder sein gelassen habe.

Das Abfangen einer einzelnen Taste ist da aber drin.

Nerv mich mal dazu... dass der Punkt auf meiner Todo-Liste weiter oben bleibt. :D

PS: NCurses bei Wikibooks

Re: Endlos Programm abbrechen

Verfasst: Di Aug 24, 2021 11:47 am
von nufan
Wäre auch eine Gelegenheit diesen Bereich zu vervollständigen :D
https://www.proggen.org/doku.php?id=gui:ncurses:start

Re: Endlos Programm abbrechen

Verfasst: Di Aug 24, 2021 1:31 pm
von Xin
nufan hat geschrieben:
Di Aug 24, 2021 11:47 am
Wäre auch eine Gelegenheit diesen Bereich zu vervollständigen :D
https://www.proggen.org/doku.php?id=gui:ncurses:start
Da dachte ich auch mal dran... aber ich wollte mich da jetzt nicht aus dem Fenster lehnen. ^^ :lol:

Re: Endlos Programm abbrechen

Verfasst: So Sep 05, 2021 5:12 pm
von Josef Wismeth
Hallo darkwin!

Hier habe ich einen code für die Linux-Konsole.
Vielleicht umzumodeln auf Windows. Weis ja nicht, was du für ein System hast:

Code: Alles auswählen

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>

int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;
 
  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
 
  ch = getchar();
 
  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);
 
 
 
  if(ch != EOF)
  {
    //ungetc(ch, stdin);
    return ch;
  }
 
  return 0;
}
 
void clpuf(void)
 {
 while (getc(stdin) != '\n')
    ;
 } 
 

int main(void)
{
  int letter= 0;

 printf("kbhittest 0.01\n");

while((letter = kbhit()) == 0)
  {
   //if (letter != 0) clpuf();
    printf("Press a key: %d\n", letter);
   }
   printf("You pressed '%c'= %ddez = %xhex\n", letter,letter,letter);
 
 return 0;
}

Re: Endlos Programm abbrechen

Verfasst: So Sep 05, 2021 6:08 pm
von darkwin
Hallo Josef, danke schau ich mir an.
Ich nutze Linux.
Mein Projekt das ich derzeit Programmiere soll später einmal auf einem ESP laufen.
Da ich aber gar nicht so richtig wusste wie ich den Algorithmus dafür entwickeln muss, mache ich das erst einmal mit meinem PC und lasse es wenn es läuft auf einem Raspberry 4 laufen.
Anschließend kommt dann die Portierung auf den ESP.
Dieses Flashen und testen auf einen ESP/Arduino braucht einfach zu viel Zeit.

Re: Endlos Programm abbrechen

Verfasst: Di Sep 21, 2021 12:37 pm
von darkwin
Hallo, kurze Rückmeldung.
Ich habe es mit ncurses gemacht.
So konnte ich auch den Bildschirm etwas einteilen.
So konnte ich gleiche meine Virtuelle Tastatur, den Virtuellen Bildschirm und ein Logbereich realisieren.
Das Programm läuft im dauerloop und reagiert auf Tasten. So kann ich zur Laufzeit das Log aus und einschalten und die Virtuelle Tastatur bedienen.

@Joesef
Mit kbhit wird es wohl auch gehen. Habe da jetzt einiges Quer gelesen.