Hoe vang ik een Ctrl+C-gebeurtenis in C++?
Antwoord 1, autoriteit 100%
signal
is niet de meest betrouwbare manier omdat het in implementaties verschilt. Ik zou aanraden om sigaction
te gebruiken. Tom’s code ziet er nu als volgt uit:
#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;
}
Antwoord 2, autoriteit 32%
Voor een Windows-console-app wilt u SetConsoleCtrlHandlergebruiken om omgaan met CTRL+Cen CTRL+BREAK.
Zie hiervoor een voorbeeld.
Antwoord 3, autoriteit 23%
Je moet het SIGINT signaalopvangen (we hebben het toch over POSIX?)
Zie het antwoord van @Gab Royer voor sigactie.
Voorbeeld:
#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;
}
Antwoord 4
Ja, dit is een platformafhankelijke vraag.
Als u een consoleprogramma op POSIX schrijft,
gebruik de signaal-API (#include <signal.h>
).
In een WIN32 GUI-toepassing moet u het bericht WM_KEYDOWN
afhandelen.