【发布时间】:2017-05-14 01:22:42
【问题描述】:
下面是我在 win32 上运行的代码。
#include "stdafx.h"
#include <signal.h>
void INThandler( int sig )
{
printf( "Ctrl-C pressed\n" );
}
int main ()
{
signal( SIGINT, INThandler );
while (1)
{
}
return 0;
}
我按两次ctrl-c后程序的输出如下。
在 test.exe 中的 0x76707577 (kernel32.dll) 处引发异常:0x40010005: Control-C。
线程 0x6a8 已退出,代码为 0 (0x0)。
在 test.exe 中的 0x76707577 (kernel32.dll) 处引发异常:0x40010005: Control-C。
线程 0x4104 已退出,代码为 -1073741510 (0xc000013a)。
程序“[14580] test.exe”已退出,代码为 -1073741510 (0xc000013a)。
我的问题是:为什么我的第二个 ctrl-c 不能被我的信号处理功能捕获?此类问题应该如何处理?
我遇到了这个问题,因为我的真实程序需要大量资源,并且需要很长时间才能释放这些资源。所以如果在第 2 次 ctrl-c 来临时没有完成释放过程,就会产生一些错误(内存泄漏)。我想避免这种情况。
【问题讨论】: