Endlos Programm abbrechen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Endlos Programm abbrechen

Beitrag von darkwin » Fr Aug 20, 2021 5:18 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Endlos Programm abbrechen

Beitrag von Xin » Sa Aug 21, 2021 10:31 am

Ü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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Endlos Programm abbrechen

Beitrag von darkwin » Mo Aug 23, 2021 6:51 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Endlos Programm abbrechen

Beitrag von Xin » Di Aug 24, 2021 10:31 am

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
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Endlos Programm abbrechen

Beitrag von nufan » 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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Endlos Programm abbrechen

Beitrag von Xin » Di Aug 24, 2021 1:31 pm

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:
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Josef Wismeth
Beiträge: 5
Registriert: So Sep 05, 2021 5:08 pm
Wohnort: Oberpfalz

Re: Endlos Programm abbrechen

Beitrag von Josef Wismeth » So Sep 05, 2021 5:12 pm

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;
}

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Endlos Programm abbrechen

Beitrag von darkwin » So Sep 05, 2021 6:08 pm

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.

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Endlos Programm abbrechen

Beitrag von darkwin » Di Sep 21, 2021 12:37 pm

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.

Antworten