Hoe kan ik een ctrl-c-gebeurtenis vangen?

Hoe vang ik een Ctrl+C-gebeurtenis in C++?


Antwoord 1, autoriteit 100%

signalis niet de meest betrouwbare manier omdat het in implementaties verschilt. Ik zou aanraden om sigactionte 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_KEYDOWNafhandelen.

Other episodes