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 に答える