如何在其他类中接收signal()ISR

时间:2012-12-04 02:24:33

标签: c++ linux signals

现在我正在开发一个基于终端的应用程序,它利用了一些显示库。我的程序流程如下:

main.cpp
\ feature1.cpp
|
\feature2.cpp
|
\ feature3.cpp
|
\feature4.cpp

主类处于无限循环中,允许您选择四个功能中的一个。选择后,它将进入该功能的无限循环,一旦功能到达其退出状态,该循环将终止。退出后,我的程序返回主循环并允许再次接收输入以选择另一个功能。

我遇到的问题是我在main.cpp文件中设置了一个信号,以检测终端窗口的调整大小。如果它低于一定的尺寸我想做点什么。同样,我想为用户可能处于的每个功能做一些不同的事情。我的信号调用如下所示:

signal(SIGWINCH, detectResize); //detectResize(int sig) handles resize

如何使信号目标成为与当前功能对应的正确功能?最初我尝试在每个名为handleResize()的类中创建一个方法,并且每次调用signal()函数将其更改为正确的类。例如:

if(feature1 is selected)
{
    signal(SIGWINCH, f1.handleResize);
    feature1 f1(); //start feature 1 loop
}

这不起作用,因为在创建对象之前,我无法弄清楚如何传递f1.handleResize。我对C ++没有太多经验。有没有更好的方法来解决这个问题?如果它是Java,我正在考虑创建一个Resize接口(C ++类)并使每个功能实现它。然后,我可以通过某个全局变量跟踪正在使用的功能,并从<feature>.handleResize()中的handleResize()函数调用相应的main.cpp。这样的事情是可能的,还是有更优雅的C ++方法?

0 个答案:

没有答案