【发布时间】:2022-05-01 09:18:10
【问题描述】:
当用户定义的信号发送到进程时,我想使用信号处理程序更改主函数中声明的变量。我不想使用任何全局变量。
以下是示例代码。
#include <iostream>
#include <csignal>
void signal_handler(int sig) {
// I want to change value of b here
}
int main() {
signal(SIGUSR1, signal_handler);
int a, b = 10;
while(1) {
std::cin >> a;
std::cout << a * b << std::endl;
}
}
代替“b”,它可以是任何其他类型的变量(套接字文件描述符、mysql 连接等),一旦发送信号,程序必须刷新这些变量。对所有这些任务都使用全局变量并不好。
所以,请建议实现它的不同方法。 谢谢。
【问题讨论】:
-
请注意,您不能在信号处理程序中做很多事情。搜索async signal safe。
-
引用传递
-
您只需要一个由信号处理程序设置的全局
bool signal_happened。然后,您的 while 循环将定期检查并在需要时执行所需的任何操作。
标签: c++ c++11 signal-handling