Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    L' ascolto da flussi impedisce la prosecuzione del programma

    Io ho risolto questo problema delegando il compito di ascoltare ad un thread. Ad esempio:


    class chiudiPartita extends Thread {
    private Socket s;
    private Partita p;
    DataInputStream fromS = null;

    public chiudiPartita (Socket a, Partita b)
    {
    s=a;
    p=b;
    fromS = new DataInputStream(s.getInputStream());
    }

    public void run()
    {
    if (true==fromS.readBoolean())
    {
    s.close();
    p.interrupt();
    }
    }

    }

    Questa classe viene richiamata all' interno del thread "partita" .Quando il flusso proveniente dal socket comunica "true" la partita si chiude, ma contemporaneamente essa continua l' esecuzione del suo corpo (cosa che non sarebbe stata possibile se la stessa chiamata fosse stata effettuata all' interno del suo stesso corpo).
    Questa strategia si potrebbe applicare in molti altri casi. Ad esempio un programma server che gestisce la comunicazione tra client (in una chat) può rimanere in ascolto "contemporaneamente" di molti collegamenti.
    Conoscete qualche altro sistema o qualche modo per migliorare questo?

  2. #2

  3. #3

    Re: L' ascolto da flussi impedisce la prosecuzione del programma

    [supersaibal]Originariamente inviato da degno
    Questa classe viene richiamata all' interno del thread "partita" .Quando il flusso proveniente dal socket comunica "true" la partita si chiude, ma contemporaneamente essa continua l' esecuzione del suo corpo (cosa che non sarebbe stata possibile se la stessa chiamata fosse stata effettuata all' interno del suo stesso corpo).
    Questa strategia si potrebbe applicare in molti altri casi. Ad esempio un programma server che gestisce la comunicazione tra client (in una chat) può rimanere in ascolto "contemporaneamente" di molti collegamenti.
    Conoscete qualche altro sistema o qualche modo per migliorare questo? [/supersaibal]
    potresti riformulare codesta proposizione?

  4. #4
    Riformulo volentieri:
    La classe che ho creato dovrebbe servire (non ho verificato se funziona) ad interrompere un thread del tipo "Partita" che viene passato all' oggetto chiudiPartita nella chiamata del suo metodo costruttore, la quale può essere effettuata nel run() di un thread "partita". Il thread chiudiPartita resta in ascolto di un messaggio dal socket (anch' esso passato come argomento nel metodo costruttore) corrispondente al valore booleano "true", dopodichè, se lo riceverà, chiuderà la partita.
    L' utilità è quella di restare in ascolto di un eventuale messaggio, da parte del socket, che chiuda la partita e, contemporaneamente, di poter svolgere la sequenza di operazioni successive alla costruzione dell' ogg "chiudiPartita" che avviene nel run() dell' oggetto partita.
    Senza questa classe una equivalente sequenza all' interno del run() di partita

    if (true==fromS.readBoolean())
    {
    s.close();
    Thread.currentThread.interrupt();
    }

    avrebbe impedito l' esecuzione delle successive istruzioni.
    Sono stato chiaro?

  5. #5
    Ci sara' pure qualcuno che ha affrontato o deve affrontare questo argomento..

  6. #6
    Il problema è che non si capisce la domanda.

    Posta dei pezzi di codice (magari semplificato)

  7. #7
    Usa il pattern observer!
    Non devi creare clasi inutili!(Se ho capito il problema!)


    Per gli scacchi, non ce la faccio proprio! sono sommerso dalle cose da fare!
    Se puoi tienimi aggiornato!
    altrimenti aspetta che se mi libero ti do una mano!
    Blink@go

    "Non tutto quel che è oro brilla, Ne gli erranti sono perduti; Il vecchio ch'è forte non s'aggrinza, Le radici profonde non gelano.Dalle ceneri rinascerà un fuoco, L'ombra sprigionerà una scintilla, Nuova sarà la lama ormai rotta, E re quei ch'è senza corona."

    ------------
    Lang: java 1.4.1 Eclipse

  8. #8
    Semplificare il codice più di così è impossibile. Comunque il significato di questa discussione è il seguente: se si chiama un metodo di lettura da flusso generato da un socket si interrompe la prosecuzione delle operazioni del thread in cui il metodo è stato chiamato finchè il programma con cui ci si collega tramite il socket in questione non invia un messaggio.
    Nel caso di una chat, per esempio, il programma server deve stare in ascolto dei flussi provenienti da ciascun client; questo ascolto deve avvenire "contemporaneamente", cioè non si può semplicemente chiamare una lettura da flusso per ogni client collegato perchè questo porterebbe ad aspettare che il client risponda, prima di passare all' ascolto del client successivo.
    Io ho risolto questo problema con tipo di classe che ho postato sopra: l' ascolto di un messaggio true da parte di un client (utile per chiudere la partita che si sta giocando) non viene chiamato dall' oggetto partita, ma dall' oggetto chiudiPartita. Per fare questo basta far chiamare all' oggetto partita questa operazione:
    new chiudiPartita.start().
    Vorrei sapere da programmatori Java se hanno usato un' altra strategia, se hanno usato questa e cosa pensano di questa soluzione.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Per la verità non ci ho capito un ca@@o. Cmq prova a vedere su Mokabyte.it nella sezione del manuale "NETWORKING"...

  10. #10
    Ok, ti ringrazio.
    Non credevo fosse così difficile capire cosa voglio fare...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.