我怎么赶在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 + C和CTRL + 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?