当用户定义的信号发送到进程时,我想使用信号处理程序更改主函数中声明的变量。
是一个示例代码。
#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 连接等),一旦发送信号,程序必须刷新。
所以,请建议不同的方法来实现它。谢谢你。
您可以将其声明为全局变量,然后您将能够从函数内部更改其值,因为没有其他方法可以从信号处理函数访问变量(除了由信号函数定义的变量)由于其独特的原型。
如果它让你感觉更好,而不是使用全局变量,你可以使用一个专门设计来处理你的信号类型的私有静态成员:
class SigHnd {
private:
static int b;
public:
static void signal_handler(int) {
b = 20;
}
static int get_b() {
return b;
}
};
int SigHnd::b = 10;
您可以在循环中访问b
的值:
std::cout << a * SigHnd::get_b() << std::endl;
但是除了信号处理程序之外没有人可以改变它。你可以在任何你喜欢的命名空间中使用它,以避免它弄乱根命名空间。
你注册它,就像你已经注册了免费的函数处理程序:
signal(SIGUSR1, SigHnd::signal_handler);
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(23条)