Wie kann ich catch-a Strg-c event?
Wie fange ich ein Strg+C - Ereignis in C++?
Konsolenanwendung, windows-Anwendung, oder was?
Die Betriebssysteme Windows, Linux, etc..
Gut, es ist eine Qt-app, aber bei mir läuft es von der Konsole während der Entwicklung. (Das ist Linux)
Die Betriebssysteme Windows, Linux, etc..
Gut, es ist eine Qt-app, aber bei mir läuft es von der Konsole während der Entwicklung. (Das ist Linux)
InformationsquelleAutor Scott | 2009-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
signal
ist nicht der zuverlässigste Weg, wie es unterscheidet sich in der Implementierung. Ich würde empfehlen, mitsigaction
. Tom ' s code würde nun so Aussehen :int s
wie es ist argument.sig_t
ist selbst eine Funktion Zeiger Typ.<stdlib.h>, etc. - es ist C, nicht C++. In C++ sollte man nutzen <cstdlib>
Funktioniert unter OSX. In meinem main.mm-Datei, ich brauchte nicht einmal zu zählen-signal.h, stdlib.h, oder unistd.h. Ich habe gerade enthalten stdio.h und Foundation/Foundation.h, und dann, wenn ich Sie brauchte std::cout Zeug für die Ausgabe einer shutdown-Nachricht, habe ich die iostream.
printf()
ist nicht async-signal-safe, so kann nicht verwendet werden, innen-signal-handler.Diese Funktionen sind unter Windows nicht verfügbar.
InformationsquelleAutor Gab Royer
Für eine Windows-Konsole app, die Sie verwenden möchten SetConsoleCtrlHandler zu handhaben STRG+C und STRG+BREAK.
Sehen hier für ein Beispiel.
InformationsquelleAutor Chris Smith
Sie fangen die SIGINT signal (wir sprechen POSIX-rechten?)
Siehe @Gab Royers Antwort für sigaction.
Beispiel:
signal() verhält sich anders, je nach dem ob es folgt BSD oder SysV-Stil. sigaction() vorzuziehen ist.
Ja, der code hat bei mir nicht funktioniert. sigaction haben.
InformationsquelleAutor Tom
Yeah, es ist eine Plattform abhängige Frage.
Wenn Sie schreiben Sie ein Konsolenprogramm auf POSIX,
verwenden der signal-API (#include <signal.h>).
In einer WIN32-GUI-Anwendung, die Sie behandeln soll, die WM_KEYDOWN Nachricht.
InformationsquelleAutor Joyer