2011-10-26 7 views
1

スレッドの仕組みを教えてください。実際には今はうまくいっていますが、私はその背後にあるロジックを取りたいと思っています。私は同じ時間に2回の計算をするチャンスを与えると思うので、との最初の計算を待つ必要はありません。しかし、それを使用する方法?どこに最初の計算を入れ、2番目の計算を置くのか? C++ではプロセスIDを取得する必要があり、それを分割して使用する必要があります(pID == 1){//最初の計算}androidの作品スレッド

私のクラスは 私はClassBの主な活動 あるにClassA:ビューは SurfaceViewに拡張競合とクラスCとして使用した:ゲームループがスレッドに

を延長として使用して、ここで彼らは、次のとおりです。 にClassA:

public class ClassA extends Activity{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
           WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(new ClassB(this)); 
    } 
} 

ClassBの:

public class ClassB extends SurfaceView{ 
//Variables....................... 
    private ClassC GameLoop; 
//Constructor.....................  
    public GameView(final Context context) { 
     super(context); 

     GameLoop = new ClassC(this); 
     Holder=getHolder(); 
     Holder.addCallback(new SurfaceHolder.Callback() { 
      public void surfaceDestroyed(SurfaceHolder holder) { 
       // TODO Auto-generated method stub 
      } 
      public void surfaceCreated(SurfaceHolder holder) { 
       // TODO Auto-generated method stub 
      } 
      public void surfaceChanged(SurfaceHolder/// blaa bla 
       // TODO Auto-generated method stub 
      } 
     }); 
     this.setOnTouchListener(new OnTouchListener() 
     {  
      //@Override 
      public boolean onTouch(View v, MotionEvent event) { 
       // TODO Auto-generated method stub 
      } 
     }); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.GREEN); 
     //Using canvas and drawing something on it. 
    } 
} 

クラスC:クラスCで

public class ClassC extends Thread {//GameLoop 
    private ClassB view; 
    private boolean running = false; 

    public ClassC(ClassB view) { 
     this.view = view; 
    } 
    public void setRunning(boolean run) { 
      running = true; 
    } 
    @Override 
    public void run() { 
     while (running) { 
      Canvas c; 
      try { 
       c = view.getHolder().lockCanvas(); 
       synchronized (view.getHolder()) { 
        view.onDraw(c);// Here I call onDraw to draw everything 
       } 
      } finally { 
       if (c != null) { 
        view.getHolder().unlockCanvasAndPost(c); 
       } 
      } 
     } 
    } 
} 

答えて

2

あなたはスレッドが一般的にどのようにアンドロイドで動作するのか尋ねていますか?

C++では、スレッドを並列処理ツールとして使用して、反復作業の負荷をいくつかのプロセッサに分割すると仮定します。

Androidでは、マルチコアデバイスとTegraプラットフォームのような特定のフレームワークを使用していない限り、この種のスレッド処理は実際は時間の無駄です。 Androidでは、スレッドを使用して、ロジックスレッドまたはUIスレッドで実行したくないタスクを実行する方がよいでしょう。

あなたの場合、アンドロイドを使用してゲームを構築していると仮定しますが、ロジックスレッドとUIスレッドの2つのスレッドを使用することをおすすめします。これらを非同期で実行し、ゲームを円滑に実行する必要があります。

申し訳ありませんあなたの質問が正確ではないので、もっと詳しくお答えできません。

アンドロイドスレッドの詳細はこちらAndroid Developers

0

あなたはいけないonDrawを呼び出す必要がない場合、それは(主な活動によって呼び出され、あなたは何かが間違っている)。メインアクティビティでロジックスレッドを開始します。 2つのスレッドドローとロジックが得られます。 ClassCでonDrawを呼び出すと、ClassZ extend Threadを書くと、ロジックモーメントが計算されます。 Cでは、あなたはこれを使ってあなたがどんなスレッドであるかを理解します。Javaでは、1つのThread.runは1つのジョブをforkしたスレッドで行います。