[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