Re: Chronometer
On Tue, 18 Sep 2007 11:48:52 -0700, gaijinco <gaijinco@gmail.com>
wrote:
I suppose this is kind of an easy question but I'm getting a hard time
with it.
I want to have a loop that breaks upon a normal condition and a time-
condition namely to stop if the other condition haven't been met after
T milliseconds.
I have never used threads and to find how to do this I have read a lot
of info that doesn't seems to apply.
Thank you very much!
A simple way to do it would be using a volatile variable. You will
also need to chunk up the work you are doing so that you can check the
volatile variable from time to time. Set a second thread running that
just runs down a timer [Thread.sleep()] and changes the volatile
variable when the timer has finished.
No doubt the Java gurus can find a better way than this.
rossum
// --- Begin Code ---
public class TimedLoop {
static volatile boolean timeRunning = true;
static class TimeOut implements Runnable {
private int mDelay;
public TimeOut(int delay) {
mDelay = delay;
} // end constructor
public void run() {
try {
Thread.sleep(mDelay);
} catch (InterruptedException ie) { }
// Flag end of allowed time
timeRunning = false;
} // end run()
} // end class TimeOut
public static void main(String[] args) {
// Start timer thread
Runnable r = new TimeOut(2000);
Thread t = new Thread(r);
t.start();
System.out.println("Starting work loop...");
boolean workFinished = false;
while (timeRunning && !workFinished) {
workFinished = doSomeStuff();
} // end while
if (workFinished) {
System.out.println("Work completed.");
} else {
System.out.println("Loop timed out.");
} // end if
} // end main()
static boolean doSomeStuff() {
boolean workFinished;
// Do a chunk of stuff here
workFinished = false;
//workFinished = true; // For testing
return workFinished;
} // end doSomeStuff()
} // end class TimedLoop
// --- End Code ---