以下是我的场景的简化示例(这似乎很常见);
#include <signal.h>
void doMath(int &x, int &y);
void signal_handler(int signal);
int main() {
signal (SIGINT,signal_handler);
int x = 10;
int y;
doMath(x,y);
while(1);
return 0;
}
void doMath(int &x, int &y) {
for(int y=0; y<=x; y++) {
cout << y << endl;
}
return;
}
void signalHandler(int signal){
doMath(x,y);
exit(1);
}
这个基本程序在屏幕上打印 1 到 10 并一直挂在那里,直到按下 CTRL+C。此时我希望 doMath() 函数再次运行。我能看到这种情况发生的唯一方法是,如果我将 x 和 y 传递给 signalhandler(),那么它就可以将它们传递给 doMath(),以及对 doMath() 函数的引用。
我的实际程序有两个 doMath() 函数和更多变量,我想要变量值的最终转储。因此,将所有这些变量传递给 signalHandler 然后传递给这两个函数似乎是一种低效的方式。还有其他方法吗?