最近在linux
下使用alarm
函数定时,使用signal()
函数发信号
用g++
进行编译的时候,出现了如下错误:
signal(SIGALRM, DeleteLogs);
alarm(60);
main.cpp:15:31: error: invalid conversion from ‘void (*)()’ to ‘__sighandler_t {aka void (*)(int)}’ [-fpermissive]
signal(SIGALRM, DeleteLogs);
^
In file included from alarm.cpp:2:0:
/usr/include/signal.h:102:23: note: initializing argument 2 of ‘void (* signal(int, __sighandler_t))(int)’
extern __sighandler_t signal (int __sig, __sighandler_t __handler)
^
检查程序,发信号需要按时执行的函数声明如下,实现时无需传入参数
void DeleteLogs();
查询了一下signal
函数的原型如下,发现第二个参数的要求是void (int)
void ( *signal(int signum, void (*handler)(int)) ) (int);
于是修改函数声明与定义,调用时随便传入一个无用值就可以
void DeleteLogs(int);
//调用时DeleteLogs(0)即可
这样修改后,重新编译通过,测试正常