Autore Topic: Mostrare lo stato di avanzamento di un processo  (Letto 595 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
« Ultima modifica: 17 Gennaio 2024, 14:09:41 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Mostrare lo stato di avanzamento di un processo
« Risposta #1 il: 22 Aprile 2013, 11:05:36 »
L'uso del timer è l'unica aletrnativa per poter controllare l'avanzamento di un processo, ma di contro questo comporta che è il timer stesso a eseguirlo.
Il tracciamento può essere fatto tramite un timer, che allo scatenarsi dell'evento, aggiorna una finestra modale cui è presente una progressbass (o una textbox eventuale). L'apertura della finestra di dialogo deve essere fatta all'inizio del processo, e chiusa (con errore o meno) alla fine di questo.
L'unico problema del timer, è che ogni passo del processo corrisponde al delay impostato, introducendo ulteriore ritardo all'intera elaborazione.
E' da tener conto che questo ulteriore ritardo diventa apprezzabile, e quindi molto pesante, se il processo è molto lungo. Se, mettiamo il caso, il timer viene impostato a 1 decimo di secondo (per dare il tempo necessario al desktop manager di aggiornare i componenti grafici), e che i passi di elaborazione siano 1000, noi avremmo un'elaborazione lunga 100 secondi, più il tempo del singolo passo elaborativo che, diciamo, ci mette circa mezzo secondo, quindi avremo 600 secondi totali, quindi 10 minuti. La differenza si nota, in quanto senza il timer, l'elaborazione totale sarebbe di 8 minuti circa, quindi due minuti in più. In molti casi questo ulteriore e inutile ritardo potrebbe rendere le cose piuttosto fastidiose, e in alcuni casi potrebbe compromettere alcune funzionalità del nostro programma.

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: Mostrare lo stato di avanzamento di un processo
« Risposta #2 il: 22 Aprile 2013, 12:41:57 »
in pratica si fa' un "polling" verso il processo che sta' elaborando per vedere a che stato e' ... ?

non sarebbe piu' efficente che sia lo stesso processo a sparare un evento al progredire della procedura?

non mi sono messo a leggere con attenzione l'esempio nella MLI ma se nell'evento fosse possibile mettere un form_main.progressbar.value=form_main.progressbar.value +1
sarebbe forse piu' efficente .... (spaghetti code ma piu' efficente)
se corri, morirai stanco (motto degli sniper)