2

スレッド内に次のコードセクションがあります

    if(isPlaying){
        if(applyDsp){
            // Convert short lin[] to double
             Log.d("MYLOG", "applyDSP is True");

            if(bufferFull){
                // when the code reaches here x[39] always holds the latest sample
                // (if lin.length  == 1)
                Log.d("MYLOG", "bufferFull is True");
                for(i=0;i<(lin.length - 1);i++){
                    x[i] = x[i+1];
                }
            }  

これは、スレッド内の無限ループ内にあります。スレッドの run() 関数は、この無限ループが終了するまで終了しません。したがって、上記のコード セクションは、他の条件が満たされるまで呼び出され続けます。applyDspbufferFullboolean変数です。それらは最初は false ですが、一度 true になると、run() 関数内の無限ループ内で false にリセットされません。bufferFulltrue になると、無限ループが実行されるたびにメッセージとapplyDSP is TruebufferFull is True交互に表示されます。しかし、メッセージapplyDSP is Trueが連続して複数回送信され、次に 2 つのメッセージが交互に送信され、次に継続的に送信され、さらに交互に送信され、というようapplyDSP is Trueに繰り返されることがありました。私は彼のコードを何度も調べましたが、理由がわかりませんbufferFullfalse にリセットされます。そのため、メッセージが適切な順序で表示されていない可能性があると推測しています。

Logcat はメッセージを表示する前に最初にバッファリングしますか、それとも Logcat で表示される順序はメッセージが作成された正確な順序ですか?

---編集---
@TCA による回答のコメントで説明されている方法を使用すると、logcat 出力の小さなセクションのみがファイルに書き込まれます。おそらく、コマンドが指定されたときに生成されます。Android SDKのlogcatパネルにストリーミングされるように、logcat出力をファイルにストリーミングしたい。

4

1 に答える 1

0

ログメッセージは順番に出力されると思いますが、疑問がある場合は追加してください

System.currentTimeMillis()

ログメッセージを使用して、時間と照合します。

お気に入り

Log.d("MYLOG TIME IN MILLSEC:"+System.currentTimeMillis(), "bufferFull は True");

于 2013-09-02T10:20:23.043 に答える