0

実行順に一連のIFステートメントがあります。私のジレンマは、IFステートメントの1つが入力された場合、呼び出された関数が終了するまで呼び出し元のメソッドを待機させたいということです。呼び出された関数は再帰的であるため、いつ終了するかわかりません。呼び出し元のメソッドのコードは次のとおりです。

                if(log.isChecked())
                {
                    runlog(sdPath.getAbsolutePath());
                }
                if(tmp.isChecked())
                {
                    runtmp(sdPath.getAbsolutePath());
                }
                if(txt.isChecked())
                {
                    runtxt(sdPath.getAbsolutePath());
                }
                if(bf.isChecked())
                {
                    runbf(sdPath.getAbsolutePath());
                }
                if(ed.isChecked())
                {
                    runed(sdPath.getAbsolutePath());
                }

log.isChecked()が入力された場合、呼び出し元の関数(ここに示したコード、その関数)は、次の条件であるtmp.isChecked()をチェックするまで待機します。

前に述べたように、呼び出されたすべての関数runlog、runtmp、runtxt、runbf、runedは再帰的です。どうすれば私が望むことを達成できますか?

4

2 に答える 2

2

再帰缶は映画「インセプション」で最もよく説明されていると思います。やりたいことが3つあります。

  1. 寝る。
  2. 夢。
  3. 起きて、シリアルボウルを食べます。

あなたが夢を見ていると想像して、その夢の中に夢を持ってください。あなたは今、あなたがより深い夢から抜け出し、現在の夢を終えるまで、目を覚まして食べることができません。

それは基本的にあなたの例で起こっていることですが、あなたが最初に走ったことを夢見る代わりに、それが復帰状態に達するまでそれを終了することができず、それからあなたは目を覚まして食べるようになります(2番目の場合を入力してください)。

于 2012-12-13T18:18:28.223 に答える
1

これはデフォルトで発生するはずです。再帰的である入れ子関数は、ここでは違いはありません。

各ifブロックは、ネストされた関数がスレッドなどを開始していない限り、前のブロックが完了した後にのみ実行されます。

于 2012-12-13T18:01:42.380 に答える