首页 > 解决方案 > 如何在 sigaction sa_sigaction 中设置类方法?

问题描述

我有一个类,我想将类方法设置为 sigaction 的参数,因为我需要使用一些类属性:

class MyClass {
    void action(int sn, siginfo_t* t, void* ctx) {
        ...
    }
};

int main() {
    MyClass c;
    struct sigaction sig_action;
    sig_action.sa_sigaction = c.action;   // ERROR!
}

即使我尝试使用std::bindwithreinterpret_cast但没有工作。

那么,如何设置sa_sigaction类方法呢?

注意:它应该是类方法,而不是静态方法或函数。

标签: c++multithreadingsignalsc++17

解决方案


如果你看一下 的声明sigaction::sa_sigaction,你会发现它是void (*)(int,siginfo_t*,void*)。这是指向函数的指针。

注意:它应该是类方法,而不是静态方法或函数。

不可能,因为指向函数的指针不能指向非静态成员函数。您必须将指向非成员或静态成员函数的指针作为信号处理程序传递。如果您愿意,该函数可以反过来调用非静态成员函数(只要该函数是异步信号安全的)。

我需要使用一些类属性

确保这些属性是 type volatile sig_atomic_t


推荐阅读