C++ 信号处理异常行为
我只是在试验信号处理,所以我写了一个程序,来测试SIGINT,但奇怪的事情发生了 我的代码是: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)
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操作系统将生成一个新线程来专门处理该中断。”。