信号处理奇怪的行为
signal handling strange behaviour
本文关键字:信号处理 更新时间:2023-10-16
我只是在试验信号处理,所以我写了一个程序来测试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);
}
当我使用ctrl+c的时候,程序其实会转到signalHandle函数,但只打印消息,而跳过其余的。 很奇怪。我使用了一个空循环,它工作得很好.另外,我使用了提高功能,也很好。我不知道为什么我会得到这个奇怪的结果......而且我对这个话题有点困惑,大多数培训只是强调提高功能。我正在使用Windows,那么我必须在哪里寻找更深入的理解?我的书想让我看看系统手册...
我相信
您的问题与您将cin
与int
一起使用,但同时为其提供"char"这一事实有关。
因此,如果您用 0
以外的任何内容来回答问题,该程序将继续运行,直到循环结束。但是如果你为它提供一些无法解析为int
的东西,比如y
,response
将等于 0,你的程序将exit()
。
要解决此问题,您只需将int reponse
更改为char response
,如果这是您想要的。
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 通过安装信号处理程序关闭多线程应用程序
- 为什么我的信号处理程序只执行一次?
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- C++ 在信号处理程序后继续执行
- 没有信号处理程序的POSIX定时器的目的是什么?
- 为什么这个信号处理程序不能捕获 SIGHUP 或 SIGQUIT?
- 如何在C++中使用 std::bind 函数作为信号处理程序?
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 如何将信号处理程序添加为方法
- 窗口上信号处理程序的异步安全写入函数
- 使用信号处理程序处理从 FIFO 接收的数据
- gtkmm/glade - 将信号处理程序连接到 MenuShell
- GTK+3 编译错误"找不到信号处理程序",您是否使用 -rdynamic 进行了编译?
- Linux 中的信号处理程序使用 sigaction (C++)
- 使用 enum 参数将 C++ 对象信号连接到 QML 信号处理程序