[Php-it] [JS] simulare lo sleep.
Marcello Vezzelli
marcello at vezz.it
Thu Dec 28 15:43:39 CET 2006
Davide Michel 'ZioBudda' Morelli wrote:
>
> Marcello Vezzelli ha scritto:
>> function mostra() {
>> tmp = document.createElement('input');
>> tmp.setAttribute('type','text');
>> tmp2= document.getElementById('miodiv');
>> tmp2.appendChild(tmp);
>> //Questa l'ho scritta io per provarle tutte.
>> tmp2.innerHTML = tmp2.innerHTML;
>> setTimeout('dormi()',1);
>> }
>
> Funziona solamente perche' setTimeout() è l'ultima istruzione ad
> essere eseguita. Altrimenti non andrebbe bene.
Da quel che ho capito, volevi vedere le modifiche appena fatte e poi
aspettare del tempo, poi fare altre cose.
Le "altre cose" le fai dove c'è l'alert...
Questo comportamento è molto stile wndproc su windows, ed è molto
probabile che sia implementato in un modo simile.
setTimeout('dormi()',1000);
sleep(5);
Questo ad esempio non funziona. In teoria la funzione dormi viene
chiamata dopo 1 secondo... invece viene chiamata dopo 5.
L'evento viene "accodato" come un messaggio... se blocchi l'esecuzione
dello script con la sleep, i messaggi non vengono processati.
Sarebbe interessante capire quanto è atomica questa cosa...
probabilmente è a livello di funzione. Non ho mai letto documentazione
su queste cose... ce ne sarà?
Se vuoi ottenere il risultato dell'attesa, devi impostare tutto il tuo
script a eventi, per permettere all'interprete javascript di "respirare"
tra un blocco di codice e l'altro... in pratica simuli una window procedure.
Il ciclo while (che non è scritto male... è scritto come è giusto che
sia scritto) non va usato, perché blocca l'esecuzione del codice dentro
una funzione.
Dovresti usare un contatore globale che viene incrementato da una
setTimeout. Dentro all'evento della setTimeout processi l'elemento
n-esimo e incrementi, poi fai una nuova setTimeout. Tra queste
operazioni puoi inserire delle sleep bloccanti.
Cmq, javascript non è pensato per queste cose...
Ciao
Marcello
More information about the Php-it
mailing list