[JS] setTimeout() - synchronizacja

0
<HTML>
<HEAD>
<TITLE></TITLE>
<script type="text/javascript">
function start(){
  start_date = new Date();
  var h = start_date.getHours();
  var m = start_date.getMinutes();
  var s = start_date.getSeconds();
  document.getElementById('start').value = addZero(h) + ":" + addZero(m) +":" + addZero(s);

  now();
  time();
}

function now(){
  now_time = new Date();
  var h = now_time.getHours();
  var m = now_time.getMinutes();
  var s = now_time.getSeconds();
  document.getElementById('now').value = addZero(h) + ":" + addZero(m) +":" + addZero(s);

  setTimeout("now()", 1000);
}

var se=h=m=s=0;
function time(){
  se++;
  if(se == 59){
    m++;
    se=0;
  }
  if(m == 59){
    h++;
    m=0;
  }

  document.getElementById('time').value = h + "h " + m + "m " + se + "s ";

  setTimeout("time()", 1000);
}

function addZero(x){
  if(x<10)
    x = "0" + x;
  return x;
}
</script>
</HEAD>
<BODY onload="start();">
<input type="text" size="20" id="start"><br />
<input type="text" size="20" id="now"><br />
<input type="text" size="20" id="time"><br />
</BODY>
</HTML>

dlaczego w powyższym kodzie już po kilku minautach widać różnice w czasie, który upłąnął pomiedzy inputem z aktualna godziną a czasem liczonym przez setTimeout("time()", 1000); :/ ??

0

bo timeout nie liczy dokładnie 1000 ms czasem moze to być 1001, 1005 czasem 998 itd to jest przybliżona wartość i zależy od wielu czynników, np obciązenie proca systemu operacyjnego przeglądarki itd

0

Poza tym, ponownie setTimeout wywołujesz pod koniec funkcji time, a przecież jej wykonanie też trochę zajmuje (w końcu to tylko język skryptowy).

Nie polegaj na setTimeout.

0

OK, dzięki za info...
wiem, że wywołuje pod koniec ale myślałem ze nie bedzię aż tak dużego niezsynchronizowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1