Laufendes Programm beenden?
-
Danke, aber die Frage war eher darauf bezogen, wie ich die Tastenkombination STRG+Q abfange.
-
Hast du denn eine grafische Anwendung mit Message-Loop, oder eine Konsolen-Anwendung (falls letzteres bist du hier nämlich wohl nicht ganz richtig -> dann würde ich (oder jemand anderes) das verschieben)
-
wie wäre es mit einem terminate handler ?!?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_exception_handling_routines.asp
-
Hast du denn eine grafische Anwendung mit Message-Loop, oder eine Konsolen-Anwendung
Es ist ein Konsolenprogramm.
wie wäre es mit einem terminate handler ?!?
Inwiefern hilft mir das? Werde daraus nicht so recht schlau.
-
habe gerade festgestellt das der link nicht ganz so glücklich war, mein fehler.
aber das müsste dir helfen
http://msdn.microsoft.com/library/en-us/vclib/html/_CRT_signal.asp#include <iostream> #include <signal.h> void sigfunc(int sig) { if(sig != SIGINT) return; else { std::cout << "aufräumen ;-)\n"; exit(-1); } } int main(int argc, char** argv) { int i; signal(SIGINT, sigfunc); while(1) { } return 0; }
-
Super, das ist genau das, was ich gesucht habe, vielen Dank!
Andere Frage auch zu diesem Thema: gibt es eine Möglichkeit, "nicht-blockierend" auf einen Tastendruck zu warten und entsprechend zu handeln?
-
versuch es mal genauer zu beschreiben. das was ich mir darunter vorstelle ist zu weit hergeholt.
-
Also ich stelle mir das so vor, dass wie in dem Beispiel von dir eine Schleife dauerhaft beschäftigt ist. Dann sollten die Keyboard-Events (von einem anderen Thread?) abgefangen werden, sodass das Programm nicht-blockierend gesteuert werden kann. Wenn ich es beispielsweise mit scanf() oder cin mache, ist es ja eine blockierende Eingabe, sprich ich muss Text eingeben. Besser so?
-
sowas ähnliches habe ich mir auch vorgestellt.
starte doch die threads bevor du eingabe machst, allerdings was willst du dann mit der eingabe machen?vielleicht so
//pseudo bool thread1() { while(thread_noch_nicht_fertig()) { mach_was(); } return true; // wenn er fertig ist } int main() { thread1(); // somit müsste thread völlig unabhängig von deiner eingabe sein while(!thread1()) { eingabe(); } }
vielleicht erzählst du uns noch was über dein programm (ziel)
-
Geht nicht mehr um mein Programm, sondern um das allgemeine Verständnis.
Im Prinzip möchte ich dasselbe machen, was du mit dem SIGTERM Signal realisiert hast, nur, dass eben anstatt einem SIGTERM (STRG+C) irgendein Buchstabe "getestet" wird. Aber ist auch nicht so wichtig.