Task (gb)

Dal 3.3

Questa classe virtuale mira ad essere la classe madre di tutte le attività in background

Questa classe non è creabile.

Proprietà
Handle   Restituisce l'ID del processo dell'attività in background.
Running   Restituisce True/False se l'attività è in esecuzione o meno.
Value   Ritorna il valore restituito dall'attività in background.

Metodi
Kill  
Stop   Interrompere l'attività in background.
Wait   Attende la fine dell'attività in background.

Eventi
Error   Questo evento viene generato quando l'attività in background stampa qualcosa sul suo output di errore.
Kill   Questo evento viene generato quando l'attività termina.
Read   Questo evento viene generato quando l'attività in background stampa qualcosa sul suo output standard.

Come funziona?

Per eseguire un'attività in background:
  • È necessario creare una classe che eredita da Task.

  • Quella classe deve avere un metodo pubblico "Main" che non abbia argomenti.

  • È necessario istanziare la classe per iniziare una nuova attività.

  • Quindi il metodo Main verrà eseguito automaticamente in background alla prossima chiamata del ciclo di eventi.

Il metodo Main è gestito da un fork. Può accedere a tutte le altre parti del programma, tranne per il fatto che il processo padre non vedrà alcuna modifica eseguita dall'attività.

A molti componenti non piacerà essere biforcati. Soprattutto quelli della GUI. Quindi stai attento.

Invio di argomenti a task

Per inviare argomenti a task, basta definire alcune variabili pubbliche al suo interno e riempirle prima che l'attività inizi.

Ricevere un risultato da task

Il metodo Main può restituire qualsiasi valore che verrà inviato al processo padre tramite un processo interno di serializzazione/deserializzazione.

Il valore può essere qualsiasi valore che è possibile utilizzare con l'istruzione WRITE.

Il processo padre deve solo leggere la proprietà Value per ottenere quel valore di ritorno.

Output standard delle task

L'output standard dell'attività (istruzione PRINT) e l'output dell'errore (istruzione ERROR) sono reindirizzati automaticamente, e il processo genitore li otterrà attraverso gli eventi Read e Error.

Errori di Task

Se accade qualcosa di brutto durante l'esecuzione dell'attività (task), il processo genitore può saperlo attraverso la lettura della proprietà Value, poiché verrà generato un evento di errore. Spero che il messaggio di errore spieghi il problema.

Priorità di Task

Per ridurre la priorità di un task, utilizzare la proprietà Application.Priority.