Linux - signal: error: invalid use of non-static member function

Linux - signal: error: invalid use of non-static member function

我最初编写了一些测试来测试我程序的信号功能。测试证明很有希望,但是将小代码更改移动到我的源代码中的 class 给我带来了一些问题。

我添加了两个函数:setAlarm() 和一个回调 alarm_handlersetAlarm()照它说的做,也就是设置闹钟。一旦时间到期,将调用运行执行函数的警报处理程序。

a.cpp

int Database::alarm_handler(int signum)
{
    dbExecSql();
}

void Database::setAlarm()
{
    signal(SIGALRM, alarm_handler);
    ualarm(500000,0);
}

b.h

class Database
{
public:
    int alarm_handler(int signum);
    void setAlarm();
    dbExecSql();
};

错误

error: invalid use of non-static member function
     signal(SIGALRM, alarm_handler);

如有任何帮助,我们将不胜感激。

编辑

我已将 alarm_handler 修改为从我的 class 中删除,但我现在收到:

error: invalid conversion from ‘int (*)(int)’ to ‘__sighandler_t {aka void (*)(int)}’ [-fpermissive]
     signal(SIGALRM, alarm_handler);
                                  ^

信号处理函数 (alarm_handler) 不能是成员函数,应该是具有 C 链接的独立函数。

将其从您的 class 中删除:

void alarm_handler(int signum)
{
    dbExecSql();
}

请注意,只有 async-signal-safe 函数可以从信号处理程序中安全调用。所以你需要确保 dbExecSql() 尊重这一点。