Faire un timeout réutilisable
Source / Exemple :
public abstract class Timeout {
private class TimeoutThread implements Runnable {
public void run() {
Object res = command();
synchronized (Timeout.this) {
if (timedOut && res != null) {
} else {
result = res;
Timeout.this.notify();
}
}
}
}
private boolean timedOut = false;
private Object result = null;
protected Timeout() {}
public synchronized Object execute(int timeout) throws Exception {
new Thread(new TimeoutThread()).start();
try {
this.wait(timeout);
} catch (InterruptedException e) {
if (result == null) {
timedOut = true;
}else{
commandTimeOut(result);
}
throw new Exception("timed out");
}
if (result != null) {
return result;
} else {
timedOut = true;
throw new Exception("timed out");
}
}
/**
- Command si on a un resultat ok mais que le timeout est eteind
- @param result
- /
protected abstract void commandTimeOut(Object result);
/**
- Command a executer
- @return
- /
protected abstract Object command();
}
Conclusion :
Dans le fichier zip vous trouverez un exemple d'utilisation
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.