Drücke ESC um abzubrechen
-
Skym0sh0 schrieb:
betriebsystemabhängig unter windows mit getch()
getch() blockiert wenn kein Input da ist. Man benötigt zusätzlich also noch _kbhit().
-
hustbaer schrieb:
_kbhit().
*kbhit()
Sieht so aus:
for(;;) { ... if(kbhit()) switch(getch()) { ...
-
hustbaer schrieb:
Skym0sh0 schrieb:
betriebsystemabhängig unter windows mit getch()
getch() blockiert wenn kein Input da ist. Man benötigt zusätzlich also noch _kbhit().
mh hast recht, aber das habe ich jetzt nicht aus der frage geschlossen.
naja egal...
-
War ja auch nicht als Kritik sondern als "Vervollständigung" gemeint.
-
Danke für die vielen Antworten aber ich habe leider nichts verstanden.
Könnt ihr das vielleicht sehr genau für mich erklären?Skym0sh0 schrieb:
betriebsystemabhängig unter windows mit getch()
Ich bin noch Anfänger und das sagt mir leider fast garnichts.

Ich möchte das eine Endlosschleife...for (;;) { ... }...durch das drücken von ESC beendet wird und z.B mit etwas anderem anfängt. Beispielsweise:
cout << "Wollen Sie das Programm beenden? Y/N" << endl; cin >> Ende;
-
#include <iostream> #include <conio.h> int main() { for( ; ; ) { std::cout << "LoL" << std::endl; if ( _kbhit() ) { if ( _getch() == 27 ) // escape { std::cout << "Ende" << std::endl; break; } } } return 0x0; }aber nur unter windows (mindestens unter msvc)
-
Enitin schrieb:
Drücke ESC um abzubrechen
...jetzt bin ich abgebrochen.
-
So habe ich das fast gemeint. Aber kann man das auch dauerhaft überprüfen? Also das wenn man auf ESC drückt das Programm das sofort bemerkt. Bei dir bemerkt er es ja sofort weil der Code nicht besonders lang ist.

-
??
dann musst du per winapi (oder halt ein anderes fenster system) was basteln
aber das ist dann kein standard c++ mehr und für einen anfänger nicht einfach
-
Sowas geht bspw. mit Qt - Signals&Slots.
(Dort würde man also entweder einen Shortcut auf eine Quit-Aktion geben oder in
KeyPressedEvent()prüfen).
-
Sone schrieb:
Sowas geht bspw. mit Qt - Signals&Slots.
(Dort würde man also entweder einen Shortcut auf eine Quit-Aktion geben oder in
KeyPressedEvent()prüfen).F.uck off Qt.
-
Kellerautomat schrieb:
Sone schrieb:
Sowas geht bspw. mit Qt - Signals&Slots.
(Dort würde man also entweder einen Shortcut auf eine Quit-Aktion geben oder in
KeyPressedEvent()prüfen).F.uck off Qt.
Gut, gut. Dann mit.. ja womit denn? Mit der WINAPI bestimmt irgendwie (also dass es mit GetKeyState sowieso geht, aber ohne Schleife).
-
Hmmm... WinAPI ist erstmal nichts für mich. Trotzdem danke.

-
Enitin schrieb:
So habe ich das fast gemeint. Aber kann man das auch dauerhaft überprüfen? Also das wenn man auf ESC drückt das Programm das sofort bemerkt. Bei dir bemerkt er es ja sofort weil der Code nicht besonders lang ist.

Und was genau soll er dann machen wenn es "bemerkt" wurde?
Die einfachste Variante ist und bleibt an bestimmten Punkte zu checken ob abgebrochen werden soll.
Alle anderen Varianten sind deutlich schwieriger zu handhaben.
-
Aber wenn man zum Beispiel den Ping mit...
system(("ping " + IP).c_str());...in einer "Endlosschleife" (Was sie ja dann nicht mehr ist.) testet kann man es nicht sofort abbrechen und muss erst warten bis er fertig getestet hat.
-
Enitin schrieb:
Aber wenn man zum Beispiel den Ping mit...
system(("ping " + IP).c_str());...in einer "Endlosschleife" (Was sie ja dann nicht mehr ist.) testet kann man es nicht sofort abbrechen und muss erst warten bis er fertig getestet hat.
Ja, ich weiss.
Aber nochmal die Frage: was genau soll er jetzt machen wenn "bemerkt" wurde dass die Taste gedrückt wurde?Den "system()" Call auf magische Weise abbrechen? Sorry, das geht nicht so ohne weiteres.
Damit du überhaupt irgendwie informiert werden kannst, während ein "ununterbrechbarer" Befehl läuft, musst du Threads verwenden, und da fängt die Sache schon an kompliziert zu werden, denn Threads sind nicht ganz ohne.
Und dann kannst du "system()" trotzdem noch nicht abbrechen.Du müsstest also dein eigenes "system()" schreiben welches abbrechbar ist. Und das kann dann genau so gut wieder ohne Threads abbrechbar gemacht werden, indem es periodisch prüft ob es abbrechen soll.