c++ - 如何在sigaction sa_sigaction中设置类方法?

标签 c++ multithreading signals c++17

我有一个类,我想将类方法设置为 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::bindreinterpret_cast 一起使用,但没有成功。

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

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

最佳答案

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

NOTE: it SHOULD be a class method and not a static method or a function.

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

I need to use some class attributes

确保这些属性的类型为 volatile sig_atomic_t

关于c++ - 如何在sigaction sa_sigaction中设置类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57960577/

相关文章:

c++ - std::enable_shared_from_this:没有已知的从 a 到 a 的转换

c++ - 多线程 - 效率降低,可能由 `false sharing` 引起

java - Android Runnable 让我的设备变慢

python - siginterrupt() 只适用于第一个信号? (Python)

c++ - 信号处理程序和多线程

c - 如何中断pselect?

c++ - 像素数据传输 : 24BPP images and GL_UNPACK_ALIGNMENT set to 4

c++ - 重载函数以接受模板指针变量

c++ - 什么是 & -> double& 的变量

java并发实践14.6