Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    Eseguire operazioni di nascosto

    Salve.
    Ho un programma nel quale ogni volta che si scarica un form deve esegure un loop molto grosso (circa 1500 volte).
    Cosi ogni volta che esco appunto da un form devo aspettare circa 1000 anni per continuare ad usare la mia applicazione, proprio perchè il VB6 esegue prima il loop prima di andare avanti.
    E' possibile far eseguire questa operazione pian piano e di nascosto, magari limitandone anche la velocità cosicchè che il programma continui a funzionare in modo veloce mentre si fa il loop?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    La soluzione è quella di usare un thread secondario... peccato che VB6 non sappia nemmeno cosa sia.

    Ci vuole un pesante ricordo alle funzioni API di Windows per ottenere qualcosa in questo senso.

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

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

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Originariamente inviato da alka
    La soluzione è quella di usare un thread secondario... peccato che VB6 non sappia nemmeno cosa sia.

    Ci vuole un pesante ricordo alle funzioni API di Windows per ottenere qualcosa in questo senso.

    Ciao!
    I ricordi ce li ho ma purtroppo non sono pesanti ma anzi leggerissimi.
    apparentemente la soluzione non ci sta, quindi.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da XWolverineX
    I ricordi ce li ho ma purtroppo non sono pesanti ma anzi leggerissimi.
    apparentemente la soluzione non ci sta, quindi.
    Scusa, ho sbagliato a digitare, volevo dire "ricorso", non "ricordo".
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    che fa qquesto looppone?

  6. #6

    Re: Eseguire operazioni di nascosto

    Originariamente inviato da XWolverineX
    Salve.
    Ho un programma nel quale ogni volta che si scarica un form deve esegure un loop molto grosso (circa 1500 volte).
    Cosi ogni volta che esco appunto da un form devo aspettare circa 1000 anni per continuare ad usare la mia applicazione, proprio perchè il VB6 esegue prima il loop prima di andare avanti.
    E' possibile far eseguire questa operazione pian piano e di nascosto, magari limitandone anche la velocità cosicchè che il programma continui a funzionare in modo veloce mentre si fa il loop?
    Al posto di un loop puoi usare un Timer.
    Facendo così puoi continuare a lavorare, ed ad ogni evento Timer fai fare quello che fai fare nel ciclo. Inserisci anche un DoEvents

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Re: Re: Eseguire operazioni di nascosto

    Originariamente inviato da Luciano79
    Al posto di un loop puoi usare un Timer. Facendo così puoi continuare a lavorare [...]
    E' tutto un dire... quando si scatena l'evento del timer, fino a quando non viene terminato l'applicazione non procede poiché incapace di elaborare i successivi messaggi in coda.

    Originariamente inviato da Luciano79
    ed ad ogni evento Timer fai fare quello che fai fare nel ciclo. Inserisci anche un DoEvents
    Prendendo in considerazione quanto detto prima, l'uso di DoEvents può risultare quindi "pericoloso" poiché forza l'applicazione alla gestione completa di tutti gli eventi in coda.

    Questo dà luogo ad una serie infinita di effetti collaterali: la forzatura della gestione di tutti i messaggi rallenta le operazioni del ciclo che andrebbe eseguito in un thread separato; nel contempo, siccome i messaggi potrebbero costituire clic su pulsanti, è necessario gestire tutti i casi possibili di chiusura prematura, avvio di nuove operazioni e così via, disabilitando i controlli su cui l'utente non può agire.

    In sostanza, VB6 è uno strumento inadatto a questa esigenza; le soluzioni per simulare qualcosa di "multithreading" sono quanto di più fumoso e poco performante (rispetto alle soluzioni adatte ed efficaci) esista.

    Quando è più la fatica che il gusto, meglio usare uno strumento più adatto.

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

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

  8. #8
    discorso buono in generale. ovviamente - come per tutte le cose - magari per questo caso si riesce a trovare una soluzione alternativa. richiedo: che fa 'sto loop?

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.