Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    setInterval() ed eventi

    Ciao a tutti...
    Una domanda a bruciapelo: mi capita che una funzione che dovrebbe attivarsi ogni secondo (con il setInterval), di fatto non si attiva quando nella pagina sta lavorando un handler di evento. La funzione riparte regolarmente ogni secondo dopo quando l'event handler ha terminato di girare. Questo è molto fastidioso, soprattutto nel caso in cui si hanno delle funzioni che gestiscono gli eventi che impiegano vari secondi a girare completamente.

    Risulta a nessun altro questo comportamento anomalo?

    Grazie anticipate

    Giacomo

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non parlerei di "anomalia". Io definirei il JS non-multitasking (che poi non credo stia nelle specifiche, ma nell'implementazione che ne fanno i vari browser).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Originariamente inviato da Mich_
    Non parlerei di "anomalia". Io definirei il JS non-multitasking (che poi non credo stia nelle specifiche, ma nell'implementazione che ne fanno i vari browser).
    Ok ma è normale o no che faccia così? Se sì, come si può ovviare a questa cosa?

    Ciao e grazie

    Giacomo

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Praticamente ho gia` risposto.

    Non-multitasking significa che deve completare un'operazione prima di avviarne un'altra.
    In pratica gli interrupt sono disabilitati durante l'esecuzione degli script.

    Chiaramente la cosa e` strettamente legata alla velocita` del processore: di solito gli script sono molto brevi, quindi girano in tempi molto inferiori al secondo (minima unita` di tempo praticamente apprezzabile da noi umani), ma se la tua applicazione e` molto complessa occorre tener conto del possibile tempo di esecuzione.

    Se poi tu hai un'esigenza particolare, dovresti cercare di esporla piu` chiaramente: magari si puo` trovare il modo di aggirare il problema.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Originariamente inviato da Mich_
    Praticamente ho gia` risposto.

    Non-multitasking significa che deve completare un'operazione prima di avviarne un'altra.
    In pratica gli interrupt sono disabilitati durante l'esecuzione degli script.

    Chiaramente la cosa e` strettamente legata alla velocita` del processore: di solito gli script sono molto brevi, quindi girano in tempi molto inferiori al secondo (minima unita` di tempo praticamente apprezzabile da noi umani), ma se la tua applicazione e` molto complessa occorre tener conto del possibile tempo di esecuzione.

    Se poi tu hai un'esigenza particolare, dovresti cercare di esporla piu` chiaramente: magari si puo` trovare il modo di aggirare il problema.
    Il problema è il seguente: ho una pagina con (fra le altre cose) dei pulsanti che eseguono una serie di cose, che ho implementato nei vari handler associati agli eventi onclick. Poichè alcuni di questi impiegano svariate decine di secondi per completare il loro compito, la mia intenzione era quella di aggiornare alcune scritte a video (una specie di progress bar) per far capire a chi sta davanti al PC a che punto è l'operazione. Per fare questo ho inserito delle istruzioni nelle funzioni che ho detto sopra, che vanno a modificare del testo all'interno nella pagina o cambiano il colore di alcune celle di una tabella. Di fatto però queste istruzioni di modifica non vengono eseguite durante lo svolgimento della funzione, e la pagina viene riaggiornata solo quando la funzione ha terminato il suo lavoro. Qualcuno sa come posso ottenere quello di cui ho bisogno, senza riscrivere tutto in Java?

    Ciao e grazie.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non e` che dai molti elementi per poterti rispondere.

    In linea di massima dovresti modificare il colore (o quello che e` ) delle "prgress-bar" dall'interno delle funzioni che fanno il conto.

    Oppure interrpompere le operazioni, mediante richiamo di se stesse tramite setTimeout, in modo da permettere agli interrupt di operare.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Originariamente inviato da Mich_
    Non e` che dai molti elementi per poterti rispondere.

    In linea di massima dovresti modificare il colore (o quello che e` ) delle "prgress-bar" dall'interno delle funzioni che fanno il conto.

    Oppure interrpompere le operazioni, mediante richiamo di se stesse tramite setTimeout, in modo da permettere agli interrupt di operare.
    Buona la seconda... la tua prima soluzione era proprio quello che stavo cercando di fare ma che in realtà non viene fatto a video (il colore della progress bar viene cambiato tutto insieme quando la funzione termina definitivamente). La seconda soluzione invece va bene: al posto del ciclo FOR principale ho fatto una sottofunzione che richiama se stessa con un setTimeout con l'indice dell'ex-ciclo FOR aggiornato. Così funziona. Grazie mille di tutto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.