Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Killare un task

Salve a tutti.
Come da oggetto avrei la necessità di terminare un ben preciso task.
Ho trovato vari esempi di come "vedere" i task in esecuzione ma nessuno di
questi mostra come, eventualmente, terminarne uno da VB.
Vi ringrazio fin d'ora
Michele

 wrote in message
news:8t7epf$d96$1...@serv2.iunet.it...


 ha scritto nel messaggio
news:8t7grm$m09d2$1...@ID-56381.news.dfncis.de...


Come si usa? Ne avrei bisogno anch'io, perrchè lancio dei task da VB e
questi restano aperti...



Mi permetto di rimandarti all' odierno post di KJK::Juliet intitolato
"Closing" (senza doppi apici), che e' piu' completo e ben fatto.
Ciao
Aldo


l'ho letto con attenzione. solo una cosa. se uno mette l'istruzione End
nell'evento QueryUnload  (o Unload, non mi ricordo qual č), cioč quando uno
chiude il form principale, non dovrebbe bastare? insomma, se uno fa End, non
se la vede VB a fare tutte quelle cose che sono scritte nel post Closing?
un'ultima cosa. č poi possibile usare TerminateProcess "su se stesso"? cioe
dalla stessa applicazione (ad es. da Prova.exe su Prova.exe)?
grazie
mario

 se la vede VB a fare tutte quelle cose che sono scritte nel post Closing?
No. Non c'e' un garbage collector vero e proprio (del resto, nemmeno windows
rimette bene a posto le cose).
Un esempio semplice ed alla portata di tutti, che chiarifica il concetto
potrebbe essere il seguente:
1) apri un nuovo progetto vb;
2) metti una picture box nel form offerto di default ed assegnale l' indice
0, cosi' possiamo sfruttare l' array;
3) copia questo codice nel form (tutto, anche i commenti):
---- begin code ----
Option Explicit
Private mCol As Collection
Private Sub Form_Load()
      Dim t As Long
      Dim c1 As Class1
      '// blocco del controllo intrinseco vb
      For t = 1 To 1000
            Load Picture1(t)
      Next t
      '// blocco dell' oggetto creato dall' utente
'      Set mCol = New Collection
'      For t = 0 To 1000
'            Set c1 = New Class1
'            mCol.Add c1
'      Next t
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
      'End
End Sub
Private Sub Form_Terminate()
      MsgBox "Terminate"
End Sub
---- end code ----
4) aggiungi una classe, lasciandole pure il node predefinito di Class1;
5) copia nella classe il seguente codice:
---- begin code ----
Option Explicit
Private mCol As Collection
Private mArr() As Long
Private Sub Class_Initialize()
      ReDim mArr(0 To 1000)
      Set mCol = New Collection
      mCol.Add mArr()
End Sub
---- end code ----
Come vedi, si tratta di codice veramente banale, con l' unico scopo di
simulare un' applicazione reale che carica n controlli ed m classi (e mi
sono accontentato di un form).
Compila il progetto con il codice commentato in diversi modi:
1) senza commenti, quindi esegue tutto;
2) con solo End commentato;
3) con i blocchi del caricamento array picture box e/o collezione di class1
commentati.
Se hai nt, potresti usare il task manager per verificare le risorse
impiegate rilasciate, con w9x puoi usare il monitor delle risorse di
sistema, altrimenti va bene anche un' utility che ti piace di piu'.
Inoltre, fai caso quando viene mostrato il messaggio "Terminate", che indica
la distruzione del form.
Comunque la rigiri, se viene eseguita l' istruzione End allora talle
messaggio non appare mai.
Morale: usare End e' demoniaco :-)
Ciao
Aldo

vabbe ma allora se non si puo usare End, posso usare TerminateProcess sul
mio stesso processo?
mario


imho, se devi usare TerminateProcess() sul tuo stesso processo significa che
c' e' qualcosa di serio che non va nel tuo programma.
Dipende se preferisci prevenire o curare :-)
Ciao
Aldo

 Dipende se preferisci prevenire o curare :-)
sembrava preferisse terminare :)

no, era per evitare di usare End...
ho appena sostituito, al prog che sto facendo, gli End con una procedura che
utilizza TerminateProcess sia sulla finestra principale del mio prog, sia
sull'istanza all'applicazione Excel che si apre quando si apre il mio prog,
cosě nč l'uno nč l'altro restano in vita.
quello che mi importa seriamente di sapere, č se davvero č preferibile
questo a un normale End...
mario

 wrote in message
news:X0766.12799$FF1.8...@twister1.tin.it...

Da quello che posso aver capito dal post di KJK::Juliet mi sembra di no.
E, torno a dire, non mi pare proprio un bel modo di rilasciare le risorse.
Ciao
Aldo

ma KJK non aveva detto che NON si doveva fare End, e che TerminateProcess
era "cattivella" ma liberava le risorse...?
vabbe, io ritorno all'End...
anche se TP era davvero tosta... in pratica in una mini-micro-frazione di
secondo chiudeva brutalmente tutto, e non solo la finestra principale, ma
chiudeva VB alla grande!! perche le prove le sto facendo prima di aver
compilato il prog... sembrava di aver lanciato una bomba atomica...
::)))))))
mario

 wrote in message
news:gHf66.13007$FF1.9...@twister1.tin.it...


compilato il prog... sembrava di aver lanciato una bomba atomica...
eh sì
in fase di debug il programma non è compilato, ma interpretato ed eseguito 
passo passo dall'IDE (non storcete il naso: questo vi permette di cambiare 
il codice durante il debug). Quindi è l'IDE di VB il vero processo, non il 
tuo programma

vabbe allora provo con ExitProcess... ehm... come si usa...??? ::)))))))
mario