2

我这里有个问题:

void DrawState(){
    char statevar[1000] = {0};
    //bla bla bla
    something = showmenu(); // or showscreen() or showinput() 
    if(something){ 
       // change state
       state = new_state;
    }else{
       // return to previous state
       state = return_state;
    }
    // draw new state here.
    DrawState();
}

我需要这个函数在状态改变时运行。但是当我这样递归地写时,它会消耗太多的内存,最终导致系统崩溃。当我不这样做时,我不知道如何从外部调用自己。

有人有什么想法吗?

编辑:这是一个在管理器软件上运行的库,如插件。后台作业也需要与此实现一起使用。也许我应该在某个事件上运行它。

4

1 回答 1

2

听起来你想要的本身并不涉及递归,而只是一个回调。

当您需要在代码中的某些内容发生更改时运行某些代码时,您希望实现观察者模式。一个简单的 C 实现可能使用函数指针来保存将在更新监视的数据时运行的函数。

例如,您可以分离更新功能:

void DrawState() {
    // ... 
}

然后,您可以维护一个指向它的指针

int (*updateDraw)() = DrawState

然后做...

if (updated) {
  // when updated
  updateDraw()
}
于 2013-04-09T15:46:42.007 回答