Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti.
Il mio problema riguarda l'esecuzione di più processi contemporaneamente.
Ho un programma che oltre a svolgere altre funzioni copia dei determinati file da una cartella all'altra con relativa ProgressBar e label indicante l'avanzamento.
Soltanto che quando inizia a copiarmi il file sembra che la finestra si blocchi e non mi lascia usare il programma finchè non abbia finito... Oltre a questo la progressbar diventa invisibile non perchè non funziona ma perchè proprio si arresta il programma, come se lavorasse "da solo" per riapparire alla fine della copiatura...
Come posso ovviare a questo problema?
Non si tratta di eseguire più processi, ma più thread all'interno del tuo processo.
Se il processo che esegue la copia lo fa utilizzando lo stesso thread di quello che si occupa del ridisegno della finestra, ecco che hai il problema di cui lamenti (o il thread fa la copia o ridisegna la finestra).
Se il thread che fa la copia, utilizza un ciclo, potresti forzare il thread stesso ad occuparsi ogni tanto del ridisegno con una chiamata come la DoEvents per il VB (non so se in Delphi esiste qualcosa del genere). Se il thread è bloccato su una singola API, allora l'unico modo è creare un altro thread che si occupi della copia, lasciando il thread dell'interfaccia libero di lavorare.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
mmmh... bene... è la prima volta che sento parlare di thread...
Non bene ... l'argomento thread non è semplicissimo e se non ne hai sentito mai parlare, non mi sembra il caso di affrontarlo in una risposta di un forum ...
potrà aiutarti ... altrimenti, dovrai munirti di un buon testo (come ti consiglio di fare) e imparare con pazienza e applicazione ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
Tutte queste informazioni le ho studiate da solo e non da qualcuno.
Quindi informati meglio dopo averle lette.
A me sembra che tu non abbia capito bene il concetto di processo:
brevemente ,un processo e' come un programma in esecuzione unito alle sue informazioni di stato(memoria ,registri,I/O , ecc..).
Il thread praticamente o e' il processo stesso,quando non ne crei,o e' una parte di un processo che condivide con lui tutte le sue informazioni.(ricordando che l'altra parte di processo e' anche essa un thread).
La difficolta' nell'uso dei thread sta nel sincronizzarli: per esempio devi stare attento al loro accesso alla memoria: infatti se due thread acceddono nello stesso momento ad uno stesso contenuto creano dei problemi all'esecuzione del programma.
Ultima cosa e' che quando crei un nuovo thread esso non occupa nuova memoria,ma condivide la stessa del processo. Ed e' questo che li rende tanto efficenti.(oltre sicuramente a svolgere lavoro in contemporanea come se si avessero piu' processori).
Ultima modifica effettuata da il 19/04/2010 alle 15:43
grazie mille delle informazioni. Sei stato veramente gentile.
Io ho provato a buttare giù un codice per la copiatura dei file. L'ho fatto prima in Delphi7 e poi l'ho portato su Lazarus. Nel primo funziona alla grande. Il secondo invece mi blocca letteralmente il computer: devo resettarlo.
Posto il codice:
Postato originariamente da Saladino: Il thread praticamente o e' il processo stesso,quando non ne crei,o e' una parte di un processo che condivide con lui tutte le sue informazioni.(ricordando che l'altra parte di processo e' anche essa un thread).
Un thread è un "percorso di esecuzione" tra i tanti disponibili per un processo.
Un processo è costituito almeno da un thread (sono concetti diversi) che viene creato automaticamente dal sistema operativo (un thread non e' il processo).
Non c'è "una parte e l'altra parte" dato che i thread possono essere tanti, sicuramente piu' di 2 ...
Testo quotato
Ultima cosa e' che quando crei un nuovo thread esso non occupa nuova memoria
Non è esattamente così ... un thread può occupare memoria indipendentemente da altri thread. Semmai si deve dire che i thread condividono lo stesso "spazio di indirizzamento" del processo.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
()
Newbie
Messaggi: Iscritto:
Postato alle 7:46
Martedì, 20/04/2010
si era quello che intendevo.
Solo che tu sei stato più preciso.
Ultima modifica effettuata da il 20/04/2010 alle 7:48
Allora il codice funziona di per sè, solo che dato che io devo far passare i valori da una form a un altra ho fatto in questo modo: Dalla form principale ho impostato le variabili Source e Destination e poi ho inserito la chiamata SaveForm.Show.