Wie fange ich ein? Ctrl+C Veranstaltung in C++?
signal
ist nicht die zuverlässigste Methode, da sie sich in den Implementierungen unterscheidet. Ich würde die Verwendung von sigaction
empfehlen. Toms Code würde jetzt so aussehen:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void my_handler(int s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
Für eine Windows-Konsolenanwendung möchten Sie SetConsoleCtrlHandler verwenden CTRL+C und CTRL+BREAK.
Siehe hier für ein Beispiel.
Sie müssen das SIGINT Signal (wir reden über POSIX, oder?)
Siehe @Gab Royers Antwort zur Unterschrift.
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 verarbeiten.