0

無限の for ループが 1 つあり、この for ループを 20 秒間実行した後、ループを終了したいので、これに対して何ができますか?

Androidでの私のコードは次のとおりです。

do {
    rl += Character.toString((char) in.read());
    // Log.i("RL", "" + rl);
    if (rl.contains("<") && checkStream(rl)) {
        // Log.i("RL INSIDE", "" + rl);
        getNumerAndStatusFromRLString(rl);
        rl = "";
    }
    if (20 SECONDS COMPLETED) {
        Log.i("<rl>", "exit");
        break;
    }
} while (true);

では、20 秒が完了し、終了する時間になったことを確認するにはどうすればよいでしょうか。

どんなアイデアでも大歓迎です。

4

2 に答える 2

2

オプションの1つは、ループの前に時間を取得し、ループ中に20秒経過したかどうかを確認できると思います。

以下のようなもの:効率についてはわかりません。

   long startTime=   System.currentTimeMillis();
do {

......

     long currTime=  System.currentTimeMillis();
     long elapsedtime = currTime - startTime;
     if(elapsedtime > 20000)
      {
      break;
      }
}
于 2012-08-17T13:40:53.057 に答える
0

タスクの実行時間を指定できるタイマー タスクを使用します。

1 つの注意事項 emptor : この一連の関数を使用するには繰り返しの頻度が必要ですが、1 回限りのタイミングであるため、キャンセルのシグナルを送信できるハンドラーを使用することで回避できます。

例は次のようになります。

private Timer myTimer = new Timer();
private final int CANCEL_EXECUTION = 0x100;
private Handler myHandler = new Handler();

public void runFor20Sec(){
   myTimer.schedule(new TimerTask(){
       @Override
       public void run(){
          // Do something here
          myHandler.obtainMessage(CANCEL_EXECUTION).sendToTarget();
       }
    }, System.currentTimeMillis(), 2000);
}
public class myHandler extends Handler{
    @Override
    public void handleMessage(Message msg){
        switch(msg.what){
           case CANCEL_EXECUTION :
               myTimer.cancel();
               break;
        }
    }
}
于 2012-08-17T15:02:17.657 に答える