[ reiser @ 21.12.2005. 15:30 ] @
Pravim IRC komponentu. E sad, ja sam isplanirao da kreiram jedan thread koji ce primati podatke sa servera preko recv() komande. Medjutim, koliko sam cuo i procitao, thread se ne moze kreirati iz neke klase, vec on mora biti van nje. Kako da kreiram thread koji ce primati podatke, a ujedno ce i moci da ih salje na dalje procesiranje u recimo funkciju TReiIRC.ProcessIRCMessage() ?
Komponenta treba da radi u konzolnom modu, znaci zaboravite na prozore itd..

hvala, poz
[ Srki_82 @ 21.12.2005. 16:42 ] @
Thread se moze kreirati iz klase (kada imas formu i na OnClick nekog dugmeta kreiras thread to kreiranje se vrsi u TForm1 klasi). Jedino sto ne moze je da procedura klase bude procedura koju ce thread pozivati, ali taj problem je rezen TThread klasom tako da slobodno mozes da koristis Thread Wizzard i da kreiras svoju klasu koja nasladjuje TThread... samo promenis Execute proceduru (u njoj napisi kod za thread) i to je to. Cak ces imati i lokalne promenljive za taj thread (jeste da ce se nalaziti u drugom thread-u (verovatno glavnom), ali ce samo thread koji se nalazi u klasi moci da im pristupi tako da ne postoji opasnost i potreba za sinhronizacijom ta dva thread-a) koje mozes dodeliti prilikom pozivanja Create constructor-a (moraces samo da ga malo promenis tako da prihvata podatke koje zelis da prosledis thread-u).
U sustini... Delphi tim je ucinio thread-ove lakim za koriscenje :)
[ reiser @ 21.12.2005. 17:43 ] @
Moze li se to nekako odraditi bez TThread klase ? Znaci ono, pomocu BeginThread() fje ?

poz
[ Srki_82 @ 21.12.2005. 20:54 ] @
Nikad mi nije bilo jasno zasto svi beze od TThread pored prednosti koje nudi :)
Kao sto sam ti vec rekao u proslom postu, BeginThread ne moze da uzima funkciju neke klase nego obicnu funkciju. Ako imas kod... recimo ovakav
Code:
type
  TKlasa = class
    procedure ThreadProc(...);
  end;

var
  K: TKlasa;

begin
  K := TKlasa.Create;
  BeginThread(K.ThreadProc, ...);
  .
  .
  .
end.

To nece moci jer je procedura koju dajes BeginThread-u ustvari procedure of object, a ne obicna procedura. Nadam se da sad razumes sta ti govorim.
[ reiser @ 22.12.2005. 14:31 ] @
Yup, kontam :)
A zasto ne koristim TThread klasu... zbog velicina kompajliranog koda.
[ Srki_82 @ 22.12.2005. 14:55 ] @
Cimi mi se da si vec nekoliko puta pitao slicna pitanja u vezi sa threadovima... moj savet bi bio da da pogledas kako je TThread klasa napisana (u sustini ima jedna globalna procedura koja poziva funkcije kreiranih TThread klasa) i da uradis jednu slicnu za sebe. Posto neces koristiti VCL kod ce i dalje biti mali, a rad sa threadovima znatno olaksan.
[ reiser @ 22.12.2005. 16:50 ] @
U pravu si, nema 'leba dok ne napises nesto sam :)
Thx