C++ 信号处理异常行为

C++ 信号处理异常行为,c++,signals,C++,Signals,我只是在试验信号处理,所以我写了一个程序,来测试SIGINT,但奇怪的事情发生了 我的代码是: void signalHandle(int); int main() { signal(SIGINT, signalHandle); for (int i = 0; i < 100000; ++i) { cout << i <<"\r"; } } void signalHandle(int signalValue)

我只是在试验信号处理,所以我写了一个程序,来测试SIGINT,但奇怪的事情发生了

我的代码是:

void signalHandle(int);

int main()
{
    signal(SIGINT, signalHandle);

    for (int i = 0; i < 100000; ++i)
    {
        cout << i <<"\r";
    }

}

void signalHandle(int signalValue)
{
    cout << "Interrupt signal (" << signalValue <<
        ") recieved . Do you wish to continue?" << endl;

    int response;

    cin >> response;

    if (response == 0)
        exit(EXIT_SUCCESS);

    signal(SIGINT, signalHandle);
}
void信号句柄(int);
int main()
{
信号(SIGINT,信号手柄);
对于(int i=0;i<100000;++i)
{

cout我相信您的问题与这样一个事实有关:您将
cin
int
一起使用,但同时为其提供了一个“char”

因此,如果你用
0
以外的任何东西回答问题,程序将继续运行,直到循环结束。但是如果你提供了一些无法解析为
int
的东西,比如
y
,那么
响应将等于0,程序将
退出()


要解决这个问题,您只需将
int-response
更改为
char-response
,如果这是您想要的。

仍然像以前一样。您遇到的确切问题是什么?确切的问题是:根本没有cin!我按ctrl+c,程序调用处理函数,处理函数打印,这是第一行消息。然后eems函数忽略其余的代码,简单地说,for循环继续执行!您键入什么作为问题的答案?没有!只是它跳过了它!似乎根本没有cin“任何Win32应用程序都不支持SIGINT。当发生CTRL+C中断时,Win32操作系统将生成一个新线程来专门处理该中断。”。