CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: complicazio con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

Mantenere un thread in esecuzione in attasa di httpconnection

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di Mazinkaiser


    Registrato dal
    Sep 2009
    Messaggi
    487

    Ringraziamenti
    20
    Ringraziato 10 volte in 10 Posts
    Predefinito

    Mantenere un thread in esecuzione in attasa di httpconnection

    Come da oggetto... detto in parole povere mi serve che la mia applicazione (che è su base client-server, per dare un'idea) nel lato client "si accorga" se il server vuole inviare qualcosa e questo processo avvenga automaticamente senza alcuna notifica all'utente (quindi mi deve girare in background, da qui l'idea del thread in continuo stato di running). Come posso fare? Devo lasciare aperta per forza una socket e gestire il caso un urlconnection credo, c'è qualche soluzione migliore?

    Grassie.

  2.  
  3. #2
    Androidiano


    Registrato dal
    May 2009
    Messaggi
    250

    Ringraziamenti
    2
    Ringraziato 30 volte in 23 Posts
    Predefinito

    Per mantenere il thread sempre attivo devi metterlo in un servizio.
    Per la questione client-server, di solito il server non inizia la comunicazione, ma è sempre il client a richiedere dei dati ad esempio ogni tot minuti

  4. #3
    Senior Droid L'avatar di fulvi0x


    Registrato dal
    Jan 2010
    Messaggi
    637

    Ringraziamenti
    63
    Ringraziato 33 volte in 21 Posts
    Predefinito

    Se implementi due thread uno per il server l'altro per il client, supponiamo di mettere una variabile booleana(condizione) che assume true quando il server ha qualcosa da inviare e false altrimenti.
    Metti in attesa passiva il thread client con un ciclo progettualmente come questo(prima del codice vero e proprio del thread) :

    codice:
    while (condizione == false)                          //oppure (!condizione)
           wait();
    
    // codice thread-client
    Poi nel thread server metti questo alla fine o quando vuoi, dipende dal programma che devi fare, insomma dopo che hai percepito che ha qualcosa da inviare:

    codice:
    // codice thread-server
    
    condizione = true;
    notifyAll();
    Così il server avverte il thread-client sincronizzato (li devi sincronizzare con synchronized) che ha qualcosa da inviare.. la condizione diventa true quindi, il client non va in wait, e esegue il codice che c'è sotto!

    Sono stato un po' frettoloso ma penso di essere stato chiaro!
    Questo è il metodo consigliato, sfrutta un'attesa passiva.. volendo se non riesci puoi utilizzare un'attesa attiva, ma mantiene costantemente il mutex impegnato e quindi sukkia risorse al processore!
    Io ti consiglio di fare in questo modo!
    ciao

    PS: non dimenticare che tutti i metodi dei thread vanno nel blocco try{}catch{Exception} ma penso che lo sai! Hanno eccezioni da gestire di default, la classe da invocare è IOException mi pare..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy