Newsgroup: it.comp.lang.delphi
Titolo: Problemi con TThread

Salve a tutti...
Ecco un paio di questioni che non mi sono molto chiare su come usare i
TThread:
1) Come devo fare se voglio che il mio TThread modifichi la form
principale (nonche' alcune sue variabili) senza creare casini? A volte
mi funziona tutto senza usare particolari accorgimenti (neanche il
Synchronize), altre volte devo usare il Synchronize, altre volte
ancora se uso Synchronize mi si pianta tutto (nel senso che non
risponde + e non da msg di errore)...
2) Ho alcuni dubbi su come terminare correttamente un TThread...
Io inizialmente usavo Exit, ma funziona solo nella Execute, non in
altre procedure del Thread, e quindi non va + bene per i miei scopi:
infatti nel TThread uso varie procedure anche ricorsive. Allora ho
creato una procedura (Check, che richiamo dalle altre) nella quale
controllo se devo mettere in pausa (x questo nessun problema) o
terminate il TThread, e in questo caso non so bene come fare... Per
ora ho messo una chiamata diretta al Destroy, ma non sempre
funziona...
3) In alcuni programmi che ho fatto (i + complicati, in particolare un
prog che ha un Thread che lancia un'altro Thread e aspetta che abbia
finito prima di continuare), quando esco brutalmente (dalla x in alto
a dx della form principale) e ho un Thread in esecuzione mi da il
seguente errore:
	---------------------------
	Debugger Exception Notification
	---------------------------
	Project xxx.exe raised exception class EAccessViolation with
	message 'Access violation at address 004348F2 in module
	'XXX.EXE'. Read of address FFFFFFFF'. Process stopped. Use
	Step or Run to continue.
	---------------------------
Stesso errore se clicko su un tasto di uscita, che lancia la Close.
Ho provato a terminare il Thread prima di dare Close, ma il problema
persiste... (probabilm per il probl del punto 2)
Tra l'altro... Close e' il metodo migliore per far terminare il mio
programma?
Forse sono stato un po' troppo prolisso, ma almeno spero di essere
stato abbastanza chiaro ;-)
Grazie in anticipo!!!
Bye!
-- 
        <<* VeGeTa_CuBe *>>
 
http://members.xoom.it/vegeta3/


    ABLS Team (
www.abls.it
)
········································

descritto precedentemente nel messaggio.
Ho scoperto un'altro fatto per me inspiegabile: usando la finestra
"Thread Status" del Debug ho notato che il Thread perincipale (quello
che deve lanciare e aspettare il secondo Thread) non scompare se lo
termino (con Terminate + WaitFor), ma solo se finisce senza intoppi
l'esecuzione! Ho inoltre eliminato i richiami al secondo Thread, ma il
comportamento e' lo stesso!
Credo quindi che questa sia la causa dell'errore quando esco dal prog,
cioe' il Thread e' ancora in esecuzione, e tenta di accedere a
componenti della form principale oramai chiusa e distrutta... Ma
allora come cavolo posso terminare sto benedetto Thread?!?
Oramai sono disperato... Tentero' ancora di inserire un'altro
TEvent...


 TEvent...
Non disperarti, i Thread sono delle belle bestioline a volte.
Magari, se puoi, facci vedere un pò di codice. Anche se non si tratta di
quello appartenente
direttamente al tuo programma, va bene qualcosa che ne replichi il
funzionamento (l'idea).
Saluti,
Carmine


ABLS Team - 
www.abls.it
SINTESI S.r.l. - 
www.sintesi.com

Spero di aver azzeccato il tuo... :-)
Speriamo... per l'errore in chiusura provero' a controllare che siano
diversi da nil i vari riferimenti, dovrebbe funzionare...
Non riesco ancora a capire alcune cose, ma non ho voglia di mettermi a
rimaneggiare il codice di quel programma... era un puro esercizio,
nessuna utilita': permette di giocare (e risolvere automaticamente con
algoritmo ricorsivo) il gioco delle tre torri (gioco di ahinoi, o
quelcosa di simile...) :-)
Cmq ho chiarito molti dettagli, e quindi spero di evitare errori
simili nei miei prossimi lavori!
Ancora grazie!


funzionamento (l'idea).
Come ho detto a Marco Breveglieri, ho deciso di lasciar perdere quel
programma, cmq credo di aver scoperto gli errori di base che ho fatto
nell'implementare il Thread... la prox volta andra' meglio! ;-)
