[Php-it] [JS] simulare lo sleep.
Cristiano Verondini
cverondini at deis.unibo.it
Thu Dec 28 13:09:43 CET 2006
>>> while (miaglobal == true) tmp = '';
>>
>> Questo è un loop attivo. *non* si fa, *MAI*.
>
> Lo so anche io che non si fa mai, se utilizzassi una varibile locale,
> ma miaglobal è una variabile global quindi nel mentre del while() il
> suo stato potrebbe anche cambiare (la funzione richiamata da setTimeout
> dovrebbe avere questo scopo). Ripeto che setTimeout esegue la funzione
> che passi come primo parametro solo dopo il numero di millesecondi che
> passi come secondo parametro non è che si ferma ad aspettare il
> timeout, quindi l'unico modo per far attendere i l browser è quello
> di fare una azione ripetitiva subito dopo setTimeout fino a quando
> una qualche cosa non blocca questa azione; ecco il perche' dell'uso di una
> variabile
> globale.
Ho compreso la logica, ma che succede se per qualche motivo, qualsiasi
motivo, quella variabile non cambia stato?
> Potrà anche essere quello corretto, ma la prima istruzione dopo
> setTimeout deve essere quella che simula il tempo che passa senza fare
> nulla.
No, continui a pensare in modo procedurale, non in modo asincrono.
> Qui non si tratta di ajax. si tratta di far passare del tempo tra due
> azioni.
Due funzioni. La prima chiama settimeout() con l'intervallo e il nome
della seconda, la seconda viene chiamata allo scadere del tempo. Non c'è
altro modo.
> E' porprio perche' non è multithread che dovrebbe funzionare. Il ciclo
> while su una variabile globale dovrebbe servire proprio allo scopo di
> continuare a fare una o piu' azioni fino a quando la variabile globale
> non cambia stato (rispetto a quello che fa restare nel ciclo).
Ma al giorno d'oggi c'è ancora qualcuno che usa cicli di polling attivo?
Ripeto, non è questo il modo.
> Allora vuole dire che qualche cosa nel JS non funziona come dovrebbe.
> e che ancora peggio Safari è fatto male, perche' uno script di due righe
> di JS ti uccide tutta l'interfaccia utente.
Questo è un problema del team di sviluppo di safari, ma la cosa
importante è capire come risolvere il problema nel modo corretto.
> Non è un while(true) ma un while(varibiale_globale = true) quindi se
> cambio valore alla variabile globale lui deve uscire dal while. Visto
> che non lo fa, mi sorge il dubbio che il valore della
> variabile_globale sia salvato da qualche parte all'interno del while e che
> quindi non
> venga piu' confrontanto con quello attuale (che nel fratttempo
> potrebbe essere cambiato).
Improbabile, a meno che tu non usi delle closure. Più probabile, il
valore non viene per niente cambiato a causa di un qualche errore di logica,
di recupero di dati o altro. Userei un debugger JS per capirlo.
>> Insomma, ripensa un pochino a cosa vuoi fare! :)
>
> So' benissimo cosa voglio fare. E' JS che non me lo fa fare :)
Allora io penserei ad un modo *diverso* per farlo! :)
Cris
--
Cristiano Verondini
http://www.verondini.it --- [ICQ: 114 190]
More information about the Php-it
mailing list