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

    fermare e riprendere l'esecuzione del codice

    ciao ragazzi, ho il seguente problema, abbastanza complicato. ho numerose istanze relative a due classi di oggetti che interagiscono tra di loro, Oggetto1 e Oggetto2 con i rispettivi metodi metodo1() e metodo2(). consideriamo il caso in cui abbia diverse istanze di Oggetto1 ed una sola istanza di Oggetto2(). ciò che mi servirebbe realizzare è un comportamento di questo tipo:





    codice:
    	public void metodo1() // relativo all'Oggetto1
    	{
    		//fai qualcosa
    		
    		//blocca l'esecuzione del codice di questo metodo relativo all'Oggetto1 corrente e salva il suo stato (cioè il punto fin dove ho eseguito il codice) in una lista comune a tutti (statica)
    		
    		// fai altre cose
    		
    		//sblocca l'Oggetto2 che sicuramente si è messo nella lista dopo avermi sbloccato
    
                   // riesegui metodo1() tra un certo numero di secondi
    	}
    	
    	public void metodo2() // relativo all'Oggetto2
    	{
    		//fai qualcos'altro
    		
    		//controlla nella lista statica degli oggetti se c'è qualche Oggetto1 in attesa, estrailo dalla lista (secondo un criterio assegnato e ben preciso) e riprendi l'esecuzione del codice relativo (cioè sbloccalo)
    		// blocca l'esecuzione del codice di questo metodo relavito all'Oggetto2 e salva salva il suo stato nella lista
    		
    		// fai altre cose ancora
    
                   // riesegui metodo2() tra un certo numero di secondi
    	}
    due problemi in uno quindi: sospendere e riprendere l'esecuzione di codice (soluzione: usare i thread?) e riplannare l'esecuzione del codice dopo un tot numero di secondi (soluzione: usare le classi Timer e TimerTask)

    da tenere presente che, vista la dinamica del problema, i due oggetti si "bloccano" a vicenda, pertanto i due metodi non verranno mai eseguiti simultaneamente.

    per la prima, ho provato senza successo con i wait() e notify(), che però non sembrano adattarsi bene all'esigenza che ho di avere multiple istanze di Oggetti1. tentando di evitare l'utilizzo dei deprecati suspend() e resume() sui thread (che comunque presenta lo stesso qualche problema) cosa potrei fare?

    per la seconda, Timer mi sembra abbia una gestione poco efficiente dei rescheduling di task a intervalli di tempo variabili, in quanto ogni volta dovrei rischedulare un new TimerTask() (cosa fattibile nel caso di Oggetto1 visto che ne ho già istanze multiple e potrei quindi farla estendere direttamente da TimerTask, un po' più inefficiente nel caso di Oggetto2 di cui devo tenere solo una istanza). ci sono classi built-in alternative che fanno questo?


    tengo conto della complessità del problema esposto e ringrazio chiunque mi dia anche una piccola imbeccata
    and the black stones under my bare feet
    cold and smooth like her milk-white palm
    and the silence which falls upon this shore
    resounds now louder than oncoming storm
    for all is gone

  2. #2

    Così su due piedi...

    Dovresti usare gli "event listener" e compagnia bella... lo capisci meglio se guardi le api on line, gli ho usati troppo poco e troppo tempo fa per saperti spiegare come funzionano di preciso...

    Vik


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.