【发布时间】:2010-09-25 11:40:25
【问题描述】:
我正在做这样的事情:
#include <signal.h>
class myClass {
public:
void myFunction ()
{
signal(SIGIO,myHandler);
}
void myHandler (int signum)
{
/**
* Handling code
*/
}
}
我正在使用 gcc 在 Ubuntu 上工作。
但它不会编译。它抱怨:
错误:
void (MyClass::)(int)类型的参数与void (*) (int)不一致
有什么线索吗?或者也许只是我不能在类中使用信号?信号只允许在 C 中使用吗?
错误信息是近似翻译,因为我的编译器不是英文的。
【问题讨论】:
-
请注意信号不是线程安全的,因此如果需要,您可能不想重新考虑这一点
-
之所以需要使用静态方法(如下所述),是因为调用方法需要类的实例(对象)。无法将对象传递给信号,因此它必须是普通函数指针(而不是方法指针)。
-
@罗伯特古尔德:是的;但与主题无关。
标签: c++ signal-handling