[ Milos D @ 19.07.2004. 21:08 ] @
Dakle, napravim ja tako thread u Kylix3 na RedHat9, u execute stoji samo sleep od par sekundi (ili bilo sta drugo) i taj thread ostaje zauvek prisutan kao "zombie" thread. StartSuspended ne utice na problem. Thread ne trosi resurse, ali tu je. Kill ne uspeva da ga ubije, bez poruke o gresci. Ima li resenja za ovaj problem?
[ Rapaic Rajko @ 20.07.2004. 13:25 ] @
E, koliko su slicni Kylix TThread i Delphi-jev TThread?
Ako jesu slicni, onda treba da u constructor-u 'tvog' thread-a postavis property FreeOnTerminate na true; na taj nacin, garantovano 'umire' kad izadje iz Execute metode.
Pozdrav

Rajko
[ Milos D @ 20.07.2004. 19:45 ] @
Eh, malopre sam shvatio da se problem pojavljuje samo kada program pokrenem iz Kylix-a. Kada ga startujem nezavisno nema tog problema, tako da mi nije vazno zasto se to desava.

Inace, hvala na predlogu, ali izgleda da FreeOnTerminate ne utice na problem.
[ Rapaic Rajko @ 22.07.2004. 08:21 ] @
Aj stavi breakpoint na taj Sleep() u Execute metodi, cisto da se uveris da li uopste thread stize dotle. Lici mi da si kreirao thread sa Suspended (parametar u constructor-u), a onda imas upravo 'zombi' thread.
Ukoliko jesi kreirao suspendovane thread-ove, onda samo pozoves recimo MyThread.Resume i to je to.

Rajko
[ Milos D @ 22.07.2004. 17:54 ] @
Ma ne, tredovi odrade svoj posao lepo ali se ne uklanjaju sa liste aktivnih samo ako je program startovan iz Kylix-a inače kulturno uginu tako da me to uopšte ne brine jer se program ionako kod korisnika ne pokreće iz Kylix-a već, naravno, samostalno.
[ Rapaic Rajko @ 26.07.2004. 08:03 ] @
'Kill ne uspeva da ga ubije, bez poruke o gresci.'

Sta ti ovo znaci? Ima greska ili nema? Nemoj tako olako da prihvatas stanje stvari. Definitivno ovo sto si naveo nije regularno. Znam o cemu pricam; i meni se ranije desavalo da thread aplikacije ne rade iz IDE-a, a iz dektopa rade (i obratno). I uvek se ispostavljalo da je u pitanju greska u design-u (sinhronizaciji thread-ova).
A zasto se to desava? Zato sto timing (nemam bolji izraz) thread-ova ne tece isto, u zavisnosti kako je startovana aplikacija. Posledica toga je da se u jednom trenutku aplikacija obrati thread-u koji je vec 'mrtav' (prazna referenca), ili se thread obrati necemu sto je u tom trenutku prazna referenca. Razmisli o ovome.
Pozdrav

Rajko
[ Milos D @ 26.07.2004. 16:44 ] @
Auh, sada izgleda ovaj problem tebe nervira mnooooogo vise nego mene :)

Prvo, verovatno nisam bio dovoljno jasan jer spominjes sinhronizaciju i moguce razloge zasto tredovi ne rade kako treba - kod mene svi tredovi, u oba slucaja (IDE/standalone), provereno rade kako treba i nije problem u sinhronizaciji jer kao sto rekoh probao sam i sa tredom koji samo odradi sleep i nema ama bas nikakvu komunikaciju sa drugim tredovima. Imam ranijeg iskustva sa tredovima na Windows-u i znam kakve zavrzlame mogu da nastanu kada nesto nije dobro osmisljeno.

Inace, "kill ne uspeva da ga ubije bez poruke o gresci" znaci da kada otkucam

kill thread_pid

ne dobijam nikakvu poruku o gresci, ali na spisku tredova ovaj i dalje stoji. U stvari, nisam siguran da kill uopste moze da ubija pojedinacne tredove, samo sam pretpostavio da moze kad vec imaju pid isto kao i procesi. A pid sam saznao pomocu ps tj. pstree programa.

Ja sam ti zahvalan na odgovorima i ulozenom trudu i vremenu, ali ovaj problem je zaista nebitan zato sto a) ne utice na rad programa i b) kod korisnika se ne ispoljava.