如何在 C++ 中捕获Ctrl+C事件?
问问题
149993 次
4 回答
183
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;
}
于 2009-10-29T01:55:37.923 回答
58
对于 Windows 控制台应用程序,您希望使用SetConsoleCtrlHandler来处理CTRL+C和CTRL+ BREAK。
有关示例,请参见此处。
于 2009-10-29T02:29:12.567 回答
42
你必须捕捉到 SIGINT信号(我们说的是 POSIX 对吗?)
请参阅@Gab Royer 的 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;
}
于 2009-10-29T01:41:19.287 回答
1
是的,这是一个平台相关的问题。
如果您在 POSIX 上编写控制台程序,请使用信号 API ( #include <signal.h>
)。
在 WIN32 GUI 应用程序中,您应该处理该WM_KEYDOWN
消息。
于 2009-10-29T01:56:36.190 回答