[Php-it] [JS] simulare lo sleep.
Davide Michel 'ZioBudda' Morelli
michel at ziobudda.net
Thu Dec 28 13:03:31 CET 2006
Cristiano Verondini ha scritto:
>
>> 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.
> Il modo corretto è quello di impostare un setTimeout e cedere
> l'esecuzione ad un'altra funzione.
Potrà anche essere quello corretto, ma la prima istruzione dopo
setTimeout deve essere quella che simula il tempo che passa senza fare
nulla.
>
> Ho l'impressione da questa e dalle altre tue domande di ieri che tu
> stia sbagliando completamente paradigma. Devi smettere di pensare
> all'azione dell'utente nel solito modo (applicativo) ed incominciare a
> pensare in modo asincrono, altrimenti il tentativo di portare su ajax
> il tuo pattern di programmazione darà sempre problemi.
Qui non si tratta di ajax. si tratta di far passare del tempo tra due
azioni.
>
> Le 'attese attive' (cicli while potenzialmente senza fine) sono
> deleteri per JS, che non ha il concetto di esecuzione multithread.
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).
> Ad esempio, su Safari facendo in quel modo blocchi tutta l'interfaccia
> utente, su mozilla dopo un po' appare una finestra dicendo che lo
> script sta occupando tutte le risorse.
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.
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).
> Insomma, ripensa un pochino a cosa vuoi fare! :)
So' benissimo cosa voglio fare. E' JS che non me lo fa fare :)
M.
--
Michel 'ZioBudda' Morelli michel at ziobudda.net
Consulenza sistemistica in ambito OpenSource.
Sviluppo applicazioni web dinamiche (LAMP+Ajax)
Telefono: +39-0240706096 -- Fax: +39-0291390660
http://www.ziobudda.net ICQ: 58351764
http://www.ziobuddalabs.it Skype: zio_budda
http://www.ajaxblog.it
More information about the Php-it
mailing list