I hope this "self-adjusting" routine example could help you a bit
PHP Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<script type="text/javascript">
var
delayTarget = 15,
delaySet = delayTarget,
delaySetMin = 10,
timeLast = new Date(),
timer = setTimeout(run, delaySet);
function run(){
//some procedures here
var spanText = document.getElementsByTagName('span')[0].childNodes[0];
spanText.nodeValue =
(spanText.nodeValue == '/') ? '―'
: (spanText.nodeValue == '―') ? '\\'
: (spanText.nodeValue == '\\') ? '|' : '/';
//report
var
timeNow = new Date(),
delay = timeNow.getTime() - timeLast.getTime();
document.getElementById('delay').value = delay;
document.getElementById('delaySet').value = delaySet;
//if was too slow or too fast
if (delay > delayTarget)
delaySet--;
else
if (delay < delayTarget) delaySet++;
if (delaySet < delaySetMin)
alert('Optimize procedure for faster execution, or set a longer target delay.');
else{
//re-run
timeLast.setTime(timeNow.getTime());
timer = setTimeout(run, delaySet);
}
}
</script>
</head>
<body>
<label for="delay">Actual Delay:</label><input type="text" id="delay" readonly><br/>
<label for="delaySet">Delay Set:</label><input type="text" id="delaySet" readonly>
<span>/</span>
</body>
</html>