Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247

    [DELPHI] Multithreading

    Volevo che la mia applicazione controllasse a ogni avvio la presenza di eventuali aggiornamenti su Internet.

    Allora, utilizzando IdHTTP sono riuscito a scrivere una breve porzione di codice che confronta il numero di versione del programma con quello presente in un file di testo remoto.

    Fin qui tutto bene...

    Ora il problema è: se il server è offline, che succede? Se qualcosa va storto (ad esempio un firewall blocca l'accesso a Internet), il programma rimane bloccato per 20 secondi (l'ho sperimentato).

    Ecco che mi serve il multithreading. Col multithreading il "controllo aggiornamento" sarebbe libero di lavorare in pace senza bloccare tutto programma.

    Ho provato a consultare la guida di Delphi e un discreto numero di guide online, ma sono un capoccione e questo multithreading mi sta facendo diventare pazzo.

    Pare che ci siano un centinaio di modi diversi per farlo, ma nessuno di questi mi riesce.

    Chi mi può aiutare?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Io ho sempre apprezzato questo tutorial che spiega egregiamente molto se non tutto ciò che c'è da sapere per far le cose bene in Delphi.

    In caso di difficoltà, scrivi i tuoi dubbi (ma leggilo tutto prima).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Originariamente inviato da alka
    Io ho sempre apprezzato questo tutorial che spiega egregiamente molto se non tutto ciò che c'è da sapere per far le cose bene in Delphi.

    In caso di difficoltà, scrivi i tuoi dubbi (ma leggilo tutto prima).

    Ciao!
    Sarà fatto...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Ho ripreso a lavorare al programma.

    Sono riuscito a creare un thread. Ma ho ottenuto strani risultati: se l'utente apre altre finestre del programma (finestre modali) e subito dopo il thread di aggiornamento tenta di aprire la sua finestrella ("E' presente un aggiornamento"), si blocca tutto.

    Allora ho detto "Chi me lo fa fare?" e ho creato un eseguibile senza interfaccia grafica (Aggiorna.exe) che, lanciato dall'eseguibile principale, fa tutto per conto suo e non rompe le balle a nessuno

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Originariamente inviato da firefox88
    Ho ripreso a lavorare al programma.

    Sono riuscito a creare un thread. Ma ho ottenuto strani risultati: se l'utente apre altre finestre del programma (finestre modali) e subito dopo il thread di aggiornamento tenta di aprire la sua finestrella ("E' presente un aggiornamento"), si blocca tutto.

    Allora ho detto "Chi me lo fa fare?" e ho creato un eseguibile senza interfaccia grafica (Aggiorna.exe) che, lanciato dall'eseguibile principale, fa tutto per conto suo e non rompe le balle a nessuno
    Avrei una domanda... Come faccio, dal programma Aggiorna.exe, a rilevare la posizione e la dimensione della finestra dell'eseguibile principale?

    Grazie

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da firefox88
    Sono riuscito a creare un thread. Ma ho ottenuto strani risultati [...]
    Hai fatto uso del metodo Synchronize di TThread?
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Originariamente inviato da alka
    Hai fatto uso del metodo Synchronize di TThread?
    Ciao!
    Beh... non vedo a cosa mi serva: il thread secondario non altera il valore di nessuna variabile. Fa solo saltare fuori una finestra di dialogo qualora su Internet sia presente una versione aggiornata del programma... E questo sembra creare chissà quali problemi :master:

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da firefox88
    Beh... non vedo a cosa mi serva: il thread secondario non altera il valore di nessuna variabile. Fa solo saltare fuori una finestra di dialogo qualora su Internet sia presente una versione aggiornata del programma... E questo sembra creare chissà quali problemi :master:
    Il thread secondario fa uscire una finestra di dialogo che funziona gestendo i messaggi che vengono inviati dal thread primario dell'applicazione, quindi si tratta a tutti gli effetti di una risorsa da "proteggere" o da "sincronizzare" (usando Synchronize) nel momento in cui si fa accesso ai metodi per invocarli o alle proprietà per modificarne il valore.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    quindi si tratta a tutti gli effetti di una risorsa da "proteggere" o da "sincronizzare" (usando Synchronize) nel momento in cui si fa accesso ai metodi per invocarli o alle proprietà per modificarne il valore.

    Ciao!
    Ma come?

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da firefox88
    Ma come?
    Ogni volta che dal thread secondario accedi ad un oggetto del form, fallo usando il metodo Synchronize.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.