我如何能赶上一个CTRL-C事件?(How can I catch a ctrl-c event?)

2019-09-02 02:57发布

我怎么赶在C ++中按Ctrl + C的事件吗?

Answer 1:

signal是不是最可靠的方法,因为它在实施方式不同。 我会建议使用sigaction 。 汤姆的代码现在看起来是这样的:

#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;    
}


Answer 2:

对于Windows控制台应用程序,您要使用SetConsoleCtrlHandler处理CTRL + CCTRL + BREAK。

见这里的一个例子。



Answer 3:

你必须赶上SIGINT 信号 (我们正在谈论POSIX吧?)

见@Gab Royer's答案的sigaction。

例:

#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;

}


Answer 4:

是啊,这是与平台相关的问题。

如果你正在写在POSIX一个控制台程序,使用信号API(#包括<signal.h中>)。

在WIN32 GUI应用程序,你应该处理WM_KEYDOWN消息。



文章来源: How can I catch a ctrl-c event?