0

そのため、アプリケーションには 2 つのスレッド (とりわけ) があり、1 つはオブジェクトを変更し (例では、四角形の位置を設定)、メソッドを呼び出して、2 番目のスレッドがそれをネットワーク上で送信できるようにします。

最初のスレッド:

        public void run(){
        while(mIsRunning){
            Log.i("MovingRectThread", "Run");
                mX += 10;
                mRect.setPos(mX,mY);
                //Send Rect
                mInterface.writeData(mRect);
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

2 番目のスレッド:

public void run(){  
    int commandSize=-1;
    byte[] bufferR = new byte[ANSWER_SIZE];
    int answerResult = 0;

    while(mIsRunning){
        Log.i("ProcessThreadGraphic", "Run");

        switch(mState){
        case IDLEREAD:
            //****************
                    try {
                        commandSize = mmInStream.read(bufferR, 0, ANSWER_SIZE);
                    } 
                    catch (IOException e) {
                        connectionLost();
                    }

                    // We received something
                    if(commandSize != -1 && bufferR[0] == 0x02){
                        answerResult = bufferR[2];
                                                    if(answerResult == 0){
                            //Authorize sending again
                            mState = IDLEWRITE;
                        }
                    }
            //*********************
            break;
        case IDLEWRITE:
            //Trying to send something
            if(mBuffer != null ){
                try {
                    mmOutStream.write(mBuffer);
                    mBuffer = null;
                    mState = IDLEREAD;
                    Thread.yield();
                } catch (IOException e) {
                    connectionLost();
                }
            }
            //**************
            break;
        default:
            Log.e(TAG, "Error: state unknown");
            break;
        }
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } 
    }
}

および mInterface.writeData のみを呼び出して終了します。

    public void write(byte[]buffer){
    mBuffer = buffer;

    }

私の問題は、スレッドがうまく連携していないことです.1つは他の再起動の前に複数回ループしています.おそらく想像できるように、これは私のニーズに合わない.最初のスレッドでオブジェクトを1回変更し、次に2番目のスレッドが必要です.それを送信してから、オブジェクトを再度変更するだけです...

私が十分に明確であることを願っています。

4

0 に答える 0