0

android-ndkを使用してファイルに書き込んでいます。したがって、ファイルへの書き込みはネイティブcコードを使用して行われます。

これには、ndkを使用して入力しているある種の読み取り値が含まれています。ボタンをクリックすると、ファイルへの書き込みが始まります。同時に、ファイルの内容を読み取り、別のスレッドで使用して値を表示したいのですが、書き込み操作は15秒間続く可能性があり、ユーザーは結果を確認するためにその時間待つ必要があるため、結果を1つずつ表示したいと思います。そのファイルに入れるとすぐに1つ。

それは実行可能ですか、はいの場合、それについての方法を私に示すことができますか?

さて、私はそれから始めました、そして、それは私がそれをしている方法です、、

Thread thr1 = new Thread(r1);
Thread thr2 = new Thread(r2);
thr1.start();
thr2.start();



r1 = new Runnable() {
          public void run() {
            File sdcard= Environment.getExternalStorageDirectory();
            nativeFunction(sdcard +"/readings.txt");
            //takingReading=false;
            readingFile = new File(sdcard +"/readings.txt");

            Log.i("length of file", ""+readingFile.length());
          }
        };




r2 = new Runnable() {
          public void run() {
            try {

                  Thread.sleep(3000);
                  File sdcard= Environment.getExternalStorageDirectory();

                readingFile = new File(sdcard +"/readings.txt");

                Log.i("length of file", ""+readingFile.length());


            } catch (InterruptedException iex) {}
          }
        };

nativeFunctionが開きます

file= fopen(location,"w+");

この関数は約2分間ファイルに書き込みを続けますが、ネイティブ関数によって入力された値を継続的に取得する必要があるため、2番目のスレッドを開始しましたが、file.length()をチェックすると常に0になります。

そして、nativefunctionの書き込みが完了すると、実際のファイルサイズが表示されます。では、この問題を回避するにはどうすればよいでしょうか。

4

1 に答える 1

1

これは、pthreadを使用して可能になるはずです。したがって、2つのスレッドを生成する必要があります。1つは書き込みを実行し、もう1つは読み取りを実行します。同じファイルから実行している場合、競合状態に遭遇する可能性があるため、注意してください。

pthreadに関する詳細情報、親切にgoogle。Linuxの世界で一般的に使用されています。

于 2012-10-12T11:02:56.373 に答える