Wie erhalte ich eine Ctrl + C Ereignis in C++?Wie kann ich ein ctrl-c-Ereignis fangen? (C++)
Antwort
signal
ist nicht der zuverlässigste Weg, wie es in Implementierungen unterscheidet. Ich würde empfehlen, sigaction
zu verwenden. Toms Code würde jetzt so aussehen:
Ich denke, my_handler sollte 'int s' nehmen, da es Argument ist. 'sig_t' ist selbst ein Funktionszeigertyp. –
Works on OSX. In meiner main.mm-Datei musste ich nicht einmal signal.h, stdlib.h oder unistd.h einbeziehen. Ich habe gerade stdio.h und Foundation/Foundation.h hinzugefügt, und dann, wenn ich std :: cout Sachen für die Ausgabe einer Nachricht zum Herunterfahren tun musste, habe ich Iostream. – Volomike
Sie haben die SIGINT zu fangen signal (wir sprechen POSIX nicht wahr?)
See @Gab Royer's Antwort für sigaction.
Beispiel:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
Ja, das ist eine plattformabhängige Frage.
Wenn Sie ein Konsolenprogramm unter POSIX schreiben, verwenden Sie die Signal-API (#include <signal.h>).
In einer WIN32-GUI-Anwendung sollten Sie die WM_KEYDOWN-Nachricht behandeln.
Für eine Windows-Konsole app, möchten Sie SetConsoleCtrlHandler verwenden CTRL +C und CTRL +BREAK zu behandeln.
Siehe here für ein Beispiel.
- 1. Wie kann ich einen mysteriösen Prozesskiller fangen?
- 2. IOException kann ich nicht fangen
- 3. Welches Tastatursignal kann ich außer Ctrl-C fangen?
- 4. Welches Tool kann Pufferüberläufe in C fangen?
- 5. Wie oft sollte ich versuchen und fangen in C#?
- 6. Ich kann Facebookexceptions in Versuch fangen Block
- 7. Wie kann ich ein Bild in C#
- 8. wie kann ich Ereignisse zur Laufzeit fangen Objekte
- 9. Swift kann fatalen Fehler fangen?
- 10. Ich kann nicht eine Ausnahme fangen
- 11. Fangen Momentan ein QComboBox
- 12. C# using-Anweisung fangen Fehler
- 13. Wie kann ich Ausnahme mit Co-Modul auf Node.js fangen?
- 14. C# fangen eine Stapelüberlauf Ausnahme
- 15. Python-Programm mit Thread kann nicht fangen STRG + C
- 16. C Flüche nicht fangen Mausereignis
- 17. Wie kann man eine Ausnahme wie diese auf Flask fangen?
- 18. Ausnahmebehandlung Versuch Fangen in Fangen
- 19. fangen Ausnahme durch Zeiger in C++
- 20. ExpectedException nicht abfangen Ausnahme, aber ich kann es mit Versuch fangen fangen
- 21. Kann keine Ausnahme fangen NoSuchElementException
- 22. Wie fangen Sie eine Konstruktorausnahme?
- 23. Wie fangen ExceptionInInitializerError?
- 24. C fgets - einfache Möglichkeit, Überlauf zu fangen?
- 25. C++ versuchen/werfen/fangen => Maschinencode
- 26. Wie verwende ich try ... catch, um Gleitkommafehler zu fangen?
- 27. Wie kann ich die Timeout-Ausnahme in einer dritten dll Funktion fangen, verwende ich c Sprache in Windows
- 28. Wie fangen Sie Ausnahmen mit "using" in C#
- 29. Falsche Array-Referenz in C++ fangen
- 30. So fangen Sie SoapRequest.xml und SoapResponse.xml ein
Konsolenanwendung, Windows-Anwendung oder was? – GManNickG
Welches Betriebssystem Windows, Linux, etc .. – shf301
Nun, es ist eine Qt-App, aber ich verwende es von der Konsole während der Entwicklung. (Das ist Linux) – Scott