【问题标题】:How to run two FOR loops at the same time如何同时运行两个 FOR 循环
【发布时间】:2011-12-02 17:18:31
【问题描述】:

我正在使用加速度计,第一个代码是震动检测器: (代码1)

if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
        long curTime = System.currentTimeMillis();
        long now = System.currentTimeMillis();

        //**********************************************************************
        if ((now - mLastForce) > SHAKE_TIMEOUT) {
              mShakeCount = 0;
            }

            if ((now - mLastTime) > TIME_THRESHOLD) {
              long diff = now - mLastTime;
              float speed = Math.abs(x + y + z - mLastX - mLastY - mLastZ) / diff * 10000;
              if (speed > FORCE_THRESHOLD) {
                if ((++mShakeCount >= SHAKE_COUNT) && (now - mLastShake > SHAKE_DURATION)) {
                  mLastShake = now;
                  mShakeCount = 0;
                  if (mShakeListener != null) { 
                    mShakeListener.onShake(); 
                  }
                }
                mLastForce = now;
              }
              mLastTime = now;
              mLastX = x;
              mLastY = y;


              mLastZ = z;

当手机摇晃时,我收到消息: (代码2)

  mSensorListener.setOnShakeListener(new OnShakeListener() {

        @Override
        public void onShake() {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Shake!", Toast.LENGTH_SHORT).show();
        }
    });

我还有用于每 2 秒将加速度计值 x、y、z 保存到数组中的 for 循环: (代码3)

 if (lastUpdate == -1 || (curTime - lastUpdate) > 2000) {
            lastUpdate = curTime;

            x = values[0];
            y = values[1];
            z = values[2];

                for (int column = 0; column < 3; column++) {
                    if (column == 0) {
                        p[row][column] = values[0];

                    }
                    if (column == 1) {
                        p[row][column] = values[1];
                        //yacc.setText("Os X: " + p[row][column]);
                    }
                    if (column == 2) {
                        p[row][column] = values[2];
                        //zacc.setText("Os X: " + p[row][column]);
                    }}
                    if (row == 0) {
                        xacc.setText("Os X: " + p[row][0] + " " + p[row][1] +" " + p[row][2]);
                    }
                    if (row == 1) {
                        yacc.setText("Os X: " + p[row][0] + " " + p[row][1] +" " + p[row][2]);
                    }
                    if (row == 2) {
                        zacc.setText("Os X: " + p[row][0] + " " + p[row][1] +" " + p[row][2]);
                    }
                    if (row == 3) {
                        z2acc.setText("Os X: " + p[row][0] + " " + p[row][1] +" " + p[row][2]);
                    }
                    if (row == 4) {
                        z3acc.setText("Os X: " + p[row][0] + " " + p[row][1] +" " + p[row][2]);
                    }
                    row++;
                if (row == 5) {
                    row = 0;
                }

Code3 永无止境,code1 是震动检测器。我怎样才能一起运行它,也许用线程(如何)或其他任何东西?

【问题讨论】:

  • 如果您想同时运行两个(或更多)循环,请使用线程。只需在一个线程中定义每个循环,然后启动您的线程:)

标签: java android


【解决方案1】:

如果您想同时运行两个(或更多)循环,请使用Threads。只需在一个线程中定义每个循环,然后启动您的线程:)

示例:

第一个线程:

public class ThreadForLoopA extends Thread{
  // variables for your Thread ... 
   @Override
   public void run(){
      // your first loop here ...
   }
}

第二个线程:

public class ThreadForLoopB extends Thread{
  // variables for your Thread ... 
   @Override
   public void run(){
      // your second loop here ...
   }
}

像这样开始你的所有线程:

ThreadForLoopA threadA = new ThreadForLoopA();
ThreadForLoopB threadB = new ThreadForLoopB();

//start threads (the two loops will be executed at the same time)
threadA.start();
threadB.start();

【讨论】:

  • @Override public void onSensorChanged(int sensor, float[] values) { // TODO 自动生成的方法存根 x = values[0]; y = 值[1]; z = 值[2];
  • 如何从 onSensorChanged 获取加速度计值到 ThreatForLoopA?
  • 将它们作为参数传递给构造函数。
猜你喜欢
  • 1970-01-01
  • 2019-06-28
  • 2011-03-29
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多