while ループがあり、時間が経過したら終了させたい。
例えば:
while(condition and 10 sec has not passed){
}
while ループがあり、時間が経過したら終了させたい。
例えば:
while(condition and 10 sec has not passed){
}
long startTime = System.currentTimeMillis(); //fetch starting time
while(false||(System.currentTimeMillis()-startTime)<10000)
{
// do something
}
したがって、ステートメント
(System.currentTimeMillis()-startTime)<10000
ループが開始されてから 10 秒または 10,000 ミリ秒経過したかどうかを確認します。
編集
@Julien が指摘したように、while ループ内のコード ブロックに多くの時間がかかる場合、これは失敗する可能性があります。
まず、Runnable を実装する必要があります
class MyTask implements Runnable
{
public void run() {
// add your code here
}
}
次に、次のように ExecutorService を使用できます。
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new MyTask()), 10, TimeUnit.SECONDS); // Timeout of 10 seconds.
executor.shutdown();
何かのようなもの:
long start_time = System.currentTimeMillis();
long wait_time = 10000;
long end_time = start_time + wait_time;
while (System.currentTimeMillis() < end_time) {
//..
}
トリックを行う必要があります。他の条件も必要な場合は、while ステートメントに追加します。
これを使用しないでください
System.currentTimeMillis()-startTime
ホスト マシンの時刻の変更でハングが発生する可能性があります。このように使用することをお勧めします:
Integer i = 0;
try {
while (condition && i++ < 100) {
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
(100*100 = 10 秒のタイムアウト)