itcs3146-project/jobThread.java

82 lines
2.0 KiB
Java
Raw Normal View History

2012-09-28 18:07:28 -04:00
public class jobThread extends Thread {
private final int sleepResolution = 200; //Milliseconds
private long jobTime; //Milliseconds
private long elapsedTime;
private boolean isPaused, pauseStateChanged;
private long startTime;
private int jobID;
private boolean jobDone;
private Method parentAlgorithmDeallocate; //Our parent to notify when we're done.
2012-09-28 18:07:28 -04:00
public jobThread(long jobTime, int jobID, Method parentAlgorithmDeallocate){
2012-09-28 18:07:28 -04:00
this.jobTime = jobTime;
this.parentAlgorithmDeallocate = parentAlgorithmDeallocate;
2012-09-28 18:07:28 -04:00
elapsedTime = 0;
isPaused = false;
startTime = 0;
this.jobID = jobID;
//this.parentAlgorithm = parentAlgorithm;
}
public void pause(){
synchronized(this){
isPaused = true;
pauseStateChanged = true;
}
}
public void jobResume(){
synchronized(this){
isPaused = false;
pauseStateChanged = true;
}
}
public void run(){
//The event loop.
//Basically, check that elapsedTime plus current time delta
//are not greater than the time we're supposed to run.
//If paused, don't do anything until we resume
try{
while (!jobDone){
//Begin event logic
sleep(sleepResolution);
synchronized(this){
if (pauseStateChanged){
if (isPaused){
//We have just been paused, save the time that we've currently
//been running, and then go back to the event loop
elapsedTime += System.currentTimeMillis() - startTime;
continue;
} else {
//We have just been resumed, restart the timer
startTime = System.currentTimeMillis();
continue;
}
} else {
if (isPaused){
//Nothing much happening, we're still paused.
continue;
} else {
//Not paused, Check if we need to keep running
long currentDelta = System.currentTimeMillis() - startTime;
if (currentDelta + elapsedTime >= jobTime){
jobDone = true;
}
}
}
}
}
//We're done, go ahead and notify our algorithm to clean us up
parentAlgorithmDeallocate(jobID);
2012-09-28 18:07:28 -04:00
} catch (Exception e) {
return;
}
}
}