【发布时间】:2016-06-16 03:00:24
【问题描述】:
我在使用 signal 函数时遇到问题, 我需要第二个参数调用我的类的函数
signal (SIGINT, myClass_function);
但据我所知,它必须是静态无效的。所以我不能访问我的对象的同一个实例来访问我需要的变量
Foo.h
class Foo {
public:
std::vector<my_struct> vm = std::vector<my_struct>(50);
static void myClass_function(int parameter) {
// handling signal here
// i need to access vm here
}
};
Foo.cpp
void Foo::something() {
// call signal
signal(SIGINT, myClass_function);
}
如果用户按下 ctrl+c,vector vm 的所有数据都需要清理。没有办法吗?谁能帮帮我?
【问题讨论】:
-
帮你什么?您对信号处理程序如何工作的理解是绝对正确的。当进程接收到信号时,信号处理程序会被异步调用。就是这样。而已。一点也不差。信号处理程序不仅没有获取任何其他类型的参数,它也不能调用任何不可重入的库函数或代码。信号处理程序的所有工作,就是它是作为信号的结果被调用的。由信号处理程序来确定它需要什么以及从哪里获取它。
-
当有信号时,信号处理器应该使用
Foo的vm? -
在这篇文章中查看 Luc Touraille 的答案:Is it possible to use signal inside a C++ class?。
-
我试过这个,他建议的第二种可能性。但是编译时出现以下错误:“ undefined reference to class::instance”
-
你需要定义 class::instance。链接的答案未显示如何执行此操作。
标签: c++ linux signal-handling