Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di mikej
    Registrato dal
    Oct 2008
    Messaggi
    21

    Interruzione temporanea procedura

    Buongiorno a tutti!!!
    Ho creato un thread che riceve continuamente messaggi dalla rete e li accoda in uno stack. Un altro thread si occupa di visualizzare su una nuova finestra tali messaggi uno per volta tramite pop().
    Quando un messaggio arriva questa nuova finestra si apre automaticamente visualizzando il contenuto del messaggio però il thread di ricezione continua ad intercettare nuovi messaggi nella coda e li visualizza in una nuova finestra, continuando così per tutti i messaggi arrivati aprendo n finestre.
    Come posso gestire l'interruzione temporanea delle notifiche dei messaggi arrivati e riattivarla magari anche tramite pulsante in modo da avere solo una finestra per volta?
    Grazie per l'attenzione!!!!

    Ciao!!!!

  2. #2
    pdovresti creare un thread per ogni nuovo messaggio che arriva e rendere questi thread synchronized in modo che siano mutuamente esculsivi.
    In pratica con la parola chiave synchronized può essere in esecuzione un solo thread per volta.

  3. #3
    Utente di HTML.it L'avatar di mikej
    Registrato dal
    Oct 2008
    Messaggi
    21
    ok!!!
    grazie mille!!!!!!

    Ciao!!!

  4. #4
    Utente di HTML.it L'avatar di mikej
    Registrato dal
    Oct 2008
    Messaggi
    21
    Ciao Ivan,
    stavo pensando però che devo continuamente ricevere i messaggi dal server ed alimentare il mio stack dal quale attingo per fare la pop() e visualizzare i messaggi. Push e pop attualmente sono syncronized e se lo stack non ha elementi metto in wait() il metodo pop(). Non appena arriva un messaggio nuovo la push fa la notify().
    Ho un po' di confusione in testa....

    Secondo te devo separare i metodi push() e pop() mettendoli in thread separati?

    Ciao!

  5. #5
    mi spiace, ma non rieco a capire cosa vuoi dire...

  6. #6
    Utente di HTML.it L'avatar di mikej
    Registrato dal
    Oct 2008
    Messaggi
    21
    proviamo così:
    mi collego al server utilizzando i socket.
    Con un ciclo infinito verifico se nello stack ci sono messaggi(pop), se non ce ne sono metto in wait il thread.
    Non appena arriva un messaggio notifico(notify) e visualizzo ciò che è arrivato. Però continuo a ricevere nuovi messaggi e mi si apre una nuova finestra che contiene il messaggio. Se mi arrivano 100 messaggi mi si aprono 100 finestre. Dovrei continuare a ricevere messaggi ma la visualizzazione dovrebbe avvenire una per volta, ovvero quando chiudo la finestra del massaggio visualizzato.

    Che macello......

    grazie!!!!

  7. #7
    Istanziati una variabile boolean "messaggioGiaVisualizzato" che è uguale a true se hai già un messaggio visualizzato. Dopodiche prima di fare il notify verifichi se un messagio è già visalizzato...
    codice:
    if(!messaggioGiaVisualizzato) {
        notifyAll();
    }
    Se la tua applicazione ha una interfaccia grafica(GUI) credo che tu possa utilizzare i listener. In questo modo puoi utilizzare dei bottoni (Apri Messaggio, Chiudi Messaggio) per aprire e chiudere i vari messaggi.
    Ad esempio quando premi "Apri messaggio" ti si apre il messaggio successivo nello stack... ciò è possibile grazie ai listener.

  8. #8
    Utente di HTML.it L'avatar di mikej
    Registrato dal
    Oct 2008
    Messaggi
    21
    Ottima idea, proverò così. Però ho un altro dubbio: la ricezione dei messaggi e il relativo accodamento nello stack può continuare senza l'utilizzo della sincronizzazione. non ho molta dimestichezza con le code....

    Grazie ancora!!!

  9. #9
    Ancora una volta non capisco che vuoi dire... Tutto dipende da come strutturi la tua applicazione!
    Il tuo thread ha il suo bel ciclo while infinito che recupera i messaggi.
    (non credo che ci sia bisogno di un thread per fare questo, e soprattutto non deve essere sinchronized con il thread che visualizza il messaggio)
    Se ad un certo momento nel tuo buffer ci sono 10 messaggi, il tuo thread lancia un nuovo thread che ti visualizza un messaggio. Viene lanciato un solo thread perchè la tua variabile "messaggioGiaVisualizzato" è stata posta a false. Quindi il thread che recupera i messaggi dal server non è più in grado di lanciare altri thread.
    Spero di essere stato chiaro.

    A parte questo, Non credo ci sia bisogno di rendere sincronizzati i due thread. La sincronizzazione si utilizza quando un thread non può partire se un altro non ha finito. Ma nel tuo caso vuoi che il thread principale continui a ricevere messaggi anche se il thread che visualizza i messaggi è in esecuzione.

  10. #10
    Utente di HTML.it L'avatar di mikej
    Registrato dal
    Oct 2008
    Messaggi
    21
    adesso ho le idee più chiare grazie!!

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.