[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