在 C++中访问信号处理程序内的main()函数的变量

当用户定义的信号发送到进程时,我想使用信号处理程序更改主函数中声明的变量。

当用户定义的信号发送到进程时,我想使用信号处理程序更改主函数中声明的变量。

是一个示例代码。

#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 连接等),一旦发送信号,程序必须刷新。

所以,请建议不同的方法来实现它。谢谢你。

0

您可以将其声明为全局变量,然后您将能够从函数内部更改其值,因为没有其他方法可以从信号处理函数访问变量(除了由信号函数定义的变量)由于其独特的原型。

0

如果它让你感觉更好,而不是使用全局变量,你可以使用一个专门设计来处理你的信号类型的私有静态成员:

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);

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(633)
dd:如何计算最佳块大小
上一篇
斯坦福核心 NLP频率计数
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(23条)