繁体   English   中英

Linux - 信号:错误:无效使用非静态成员 function

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

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

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

a.cpp

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

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

bh

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

错误

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

任何帮助,将不胜感激。

编辑

我已经修改了要从 class 中删除的 alarm_handler,但是我现在收到:

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

The signal handler function ( alarm_handler ) can't be member function and should be a standalone function with C linkage.

从 class 中删除它:

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

请注意,只能从信号处理程序安全地调用异步信号安全函数。 因此,您需要确保dbExecSql()尊重这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM