Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    2

    Eccezioni e Thread java

    Salve a tutti!
    Mi sono appena iscritta al forum.
    Sto cercando di imparare come si programma in java…ma confrontando le mie competenze attuali con quelle della maggior parte degli utenti di questo forum, mi rendo conto di essere particolarmente inesperta.
    Vi sottopongo un problema che certamente per voi sarà banale, ma non per me: infatti sono alcune ore che cerco di risolverlo senza successo.
    Il problema è il seguente:
    Un thread mandato in esecuzione dal main esegue una parte di codice in cui viene gestito il turno di gioco di una partita. Se l’esecuzione del suddetto turno non si conclude entro un certo periodo di tempo, il turno deve terminare (restituendo un messaggio di errore).
    La mia idea era programmare un altro thread, (lanciato dal trhead che esegue il turno) che gestisce un timer. Se si verifica un timeout, viene sollevata un’eccezione (throw) che si propaga al thread iniziale… peccato che non so trovare il modo di propagare le eccezioni da un thread ad un altro…


    Potete aiutarmi per favore?

    Grazie
    Laura.

    P.S. Allego il codice relativo alla gestione del timer:
    public
    class Timer implements Runnable{

    longpreset;
    booleanstartTimer;


    public Timer (longmaxTime, booleanisPlayerTurn){

    this.preset=maxTime; //=2*60*1000; //2 minutes


    this.startTimer=isPlayerTurn;

    }




    privatevoid timeoutCalc ()throws Exception{

    longstartTime = System.currentTimeMillis();

    longelapsedTime = 0L;

    booleantout = false;




    while (this.startTimer && !tout) {


    elapsedTime = (new Date()).getTime() - startTime;


    tout=(elapsedTime >= this.preset);

    }




    if (tout){


    throw(new Exception());

    }



    }




    publicvoid run(){


    booleantimeout=false;


    try {

    timeoutCalc();



    }
    catch (Exception e) {


    /// ????




    }

    }

    }

  2. #2
    Potresti utilizzare un
    codice:
    thread.interrupt()
    che genera una InterruptedException(), ma utilizzare un'eccezione in questo caso è sconsigliabile...

    Potresti prevedere nel tuo thread una variabile booleana per fermare il thread ed eventualmente stampare a video quanto serve:

    codice:
     
    private boolean running=true;
    @Override
    public void run() {
            while (running) {
                //fai quello che devi fare
            }
            //stampa quello che devi stampare
    }
    
    public void fermaThread(){
        running = false;
    }
    Naturalmente potrai invocare dal secondo thread il metodo thread1.fermaThread() al termine del countdown.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    2

    Soluzione alternativa... cosa ne pensi?

    Ciao Dexter95 e grazie per l'aiuto!La soluzione che ho implementato nel frattempo è stata: dichiarare la variabile booleana timeout come globale (cioè Static) e far generare un'eccezione dal thread chiamente quando tale variabile diventa true. Non credo sia l'ottimo... probabilmente è una soluzione troppo semplicistica e brutale, ma sembra funzionare...Il thread "secondario" che conteggia il tempo, dovrebbe fermarsi automaticamente una volta esaurita la lista di istruzioni contenute nel suo metodo run(). Ovviamente nel blocco catch che cattura l'eccezione, dopo eseere stata opportunamente propagata, è contenuto il comando di reset della variabile timeout.Cosa ne pensi? Mi daresti un tuo parere?Grazie ancora.Laura

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.