Как получить доступ к членам класса и методам из статического метода (обработчик сигнала)

0

У меня есть одна проблема. Я пишу свою программу на языке 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);

      }
Теги:
signals
signal-handling

1 ответ

0

Статический метод не так сильно отличается от глобальной функции. Если вам нужно обратиться к членам экземпляра класса, ваш обработчик сигнала должен взять указатель/ссылку экземпляра в качестве аргумента.

Что-то вроде этого

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню