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.
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