【问题标题】:How to access class member and methods from static method(signal handler)如何从静态方法(信号处理程序)访问类成员和方法
【发布时间】:2014-12-04 07:46:09
【问题描述】:

我有一个问题。我正在用 C++ 语言编写我的程序。我有一个问题。我需要为我的进程设置信号处理程序。由于信号与系统级别的进程有关,我遇到了这个问题。
我的程序由几个类组成。它们连接在一起。但在这种情况下没关系。
问题是我需要从我的信号处理程序访问类的成员和方法。例如,我有一个名为 Foo 的类,它有一些成员和方法。
因此,我需要从我的处理程序中调用它的函数并更改成员。
我知道编译器应该知道这个类实例在所有程序执行过程中都会存在。
我曾尝试在另一个类中设置静态成员类 Foo 实例,但这并没有解决问题。
我不知道这样做的正确方法是什么。请说明在这种情况下如何正确实现信号处理。

这是我的代码示例:

    class MyContainer
    {
    private:
        std::vector<Foo> container;
    public:
        int removeFromContainer(Foo* aFoo) { 
        // DO some stuff 
return RESULT_CODE;
}
 int addToContainer(Foo* aFoo) { 
        // DO some stuff 
        return RESULT_CODE;
        }
    };

这是我的主要课程

class MainClass
{
private:
    int member;
public:
    void mainLoop(char* args) { 
      signal(SIGCHLD, &signalHandler);
 }
};

这是我的信号处理函数

  void static signalHandler_child(int p)
      {
           this->myContainerInstance->addToContainer(new Foo);

      }

【问题讨论】:

    标签: c++ unix signals signal-handling


    【解决方案1】:

    静态方法与全局函数没有太大区别。如果您需要访问类的实例成员,您的信号处理程序应该将实例指针/引用作为参数。

    类似的东西

    class Foo
    {
    private:
        int member;
    public:
        static int Handler(Foo* aFoo) { return aFoo->member; }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2015-01-30
      • 2012-07-26
      相关资源
      最近更新 更多