2012-10-12 3 views
0

android-ndk를 사용하여 파일에 쓰고 있습니다. 그래서 네이티브 C 코드를 사용하여 파일에 쓰기가 일어나고 있습니다.android에서 NDK로 파일을 동시에 읽고 쓰십시오.

여기에는 ndk를 사용하면서 읽는 종류가 있습니다. 버튼을 클릭하면 파일 쓰기가 시작됩니다. 그리고 동시에 나는 파일의 내용을 읽고 쓰기 작업을 15 초 동안 계속할 수있는 값을 표시하기 위해 다른 스레드로 사용하고 싶습니다. 사용자는 그 결과를보기 위해 많은 시간을 기다려야하므로 결과를 표시하고 싶습니다. 하나는 그 파일에 저장하자마자.

가능하다면 어떻게 할 수 있는지 보여줄 수 있습니까?

그럼 내가

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이

이 기능은 약 2 분 동안 파일에 쓰기 것들에 계속
file= fopen(location,"w+"); 

, 을 엽니 다 ,, ​​그것으로 시작하고 내가 그 일을 얼마나 잘 자신을 NW 하지만 난 지속적으로 두 번째 스레드를 시작하지만 난 항상 0을 file.length() 확인 때 bye 네이티브 함수를 입력 한 값을 가져와야합니다.

및 wh en nativefunction 쓰기가 완료되면 실제 파일 크기가됩니다. 그렇다면이 문제를 해결하는 방법은 무엇입니까?

+0

필자는 가능 여부와 관계없이 실현 가능성을 확인하고 싶었습니다. –

답변

1

이것은 pthread를 사용하여 가능해야합니다. 따라서 2 개의 쓰레드를 생성해야합니다. 하나는 쓰는 것이고 다른 하나는 읽는 것입니다. 동일한 파일에서 작업하는 경우 경쟁 조건이 발생할 수 있으므로 조심하십시오.

pthreads에 대한 추가 정보 (친절하게 Google). 그것은 리눅스 세계에서 일반적으로 사용됩니다.

+0

이것에 끈적 거리는 소리를주기위한 thnks, thnks 많이 –

+0

환영합니다! 다시 돌아와서 효과가 있는지 알려주십시오. –

+0

Java에서 판독기 스레드를 생성하고 그로부터 NDK를 호출 할 수 있습니다. 다소 쉬워졌습니다. –

관련 문제