Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Ruby - Memory leak
Forum - Ruby - Memory leak

Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 15:18
Mercoledì, 26/04/2017
Buon giorno!

Il mio programma cronometro ( http://www.pierotofy.it/pages/sorgenti/dettagli/19451-Cron ... ) è in grado di misurare intervalli di tempo, fornire intertempi ecc. in tempo reale.
Per tale scopo ho utilizzato i thread in questo modo:

Codice sorgente - presumibilmente Ruby

  1. def mostraTempo()  
  2.                 if @misura.stato
  3.                         @labCrono['text']=@misura.comunica()
  4.                         sleep(0.07)
  5.                         Thread.new{mostraTempo}
  6.                 end
  7.         end

Dove @misura è un' istanza della classe Tempistica.
In pratica in una label viene aggiornata ogni 0.07 il nuovo intertempo tramite la funzione @misura.comunica ( ), quindi richiamo il metodo mostraTempo con un nuovo thread.
Purtroppo ho notato che questo meccanismo assorbe parecchia memoria, senza rilasciarla.
Come posso ottimizzare il processo ?

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:47
Giovedì, 27/04/2017
Beh si, se vedi hai effettivamente creato un loop infinito :)

Il tuo scopo e' creare un singolo thread che aggiorna l'interfaccia, qualcosa come:

Codice sorgente - presumibilmente Ruby

  1. # Nel costruttore? Oppure da qualche altra parte dove inizializzi l'interfaccia
  2. Thread.new {
  3.   mostraTempo
  4. }
  5.  
  6. def mostraTempo()
  7.   while true
  8.     sleep(0.07)
  9.     # qui aggiorna il tuo @labCrono['text']
  10.   end
  11. end



Il mio blog: https://piero.dev
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:46
Venerdì, 28/04/2017
Grazie per il suggerimento ! Ora funziona perfettamente.

PM Quote