> dretva (nit, threads) ne znam kak da to velim...
Koristi ustaljeni naziv thread, inače te niko neće razumeti...
> uglavnom, kad imam neku klasu i pokrenem ju kao dretva (u dretvi, ...) kako mogu pristupiti njoj?
> imam thread number... mogu je "ubiti", "zamrznuti", a jel mogu kako pristupiti atributima klase dretve?
Kada kažeš atributima, misliš li na propertije? Pristupaš kao bilo kojoj drugoj klasi, sve što treba da bude javno staviš u public sekciju. S tim što ovde moraš biti oprezan oko multithread pristupa, npr. ako recimo glavni thread menja properti a sam thread ga koristi može doći do AV, tada se recimo mogu koristiti CriticalSection za kontrolu pristupa. Odličan način za komunikaciju sa thredovima je preko poruka, PostThreadMessage za zadavanje komandi i PostMessage (iz threada prema recimo glavnoj formi) kada treba vratiti rezultate. Potraži i starije poruke u grupi na tu temu, poput:
http://www.elitesecurity.org/t357249-0#2220513.
> zasto se brojac ne zaustavi kada je temp>3 (a to se stvarno dogodi na 4. ispisu)?
Koliko vidim brojač ti kreće od 0, ili neka ti kreće od 1 ili promeni uslov za završetak. Takođe upotreba TTimer u samom threadu i nije najbolji način za periodično procesiranje (jer zahteva poseban window), bolje je koristiti Sleep ili neke od wait funkcija.
Code:
procedure ITS_dogadaj.Execute();
begin
inicijalizacija();
Form1.Memo1.Lines.Add('Execute'+IntToStr(ThreadID));
end;
Ovo je pogrešan način korišćenja execute, ovako se thread odmah završava (i uništava), u Execute treba da stoji petlja ako se nešto duže radi, pogledaj takođe starije poruke. Zatim i ne smeš ovako direktno (Form1.Memo1.Lines...) koristiti resurse drugih threadova, moraš koristiti Synchronize ili recimo sistem sa porukama koji sam spominjao ranije.