Poslao: 25 Maj 2006 00:22
|
offline
- Pridružio: 03 Jan 2006
- Poruke: 37
|
Pozdrav,ako sam omasio forum,nemojte molim vas obristi temu,
nego je samo premestite u odgovarujuci forum,hvala unapred!
Ovako,o GLScenama pricam.
Postavio sam jedan HUDText,i napisao sam jedan thread koji menja HUDText-u boju postepenno kroz while petlju.
Zatim sam napisao jos jedan thread koji kontrolise kretanje sfere.E meni bi
trebalo da se menja boja i da se pokrece sfera u isto vreme.Dok kod mene ili se menja boja HUDText-a
ili se pokrece sfera(dok opet ne pozovem thread da mi promeni boju).Kako da uskladim da se odradi i jedan i drugi
posao,tj da se ne zamrzne nijedna radnja(ni kretanje sfere,ni menjanje boje HUDText-a)
Nadam se da sam bio jasan!
P.S. Slabo znam da radim sa thread-ovima.
Hvala,pozzz!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 25 Maj 2006 07:03
|
offline
- Srki_82
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Ako bi postavio kod verovatno bi mogli da vidimo u cemu je problem
Imaj na umu da GLScene komponente nisu thread-safe pa ako koristis TThread klasu koristi Synhronize proceduru za menjanje svojstva kontrola.
|
|
|
|
Poslao: 25 Maj 2006 11:27
|
offline
- Pridružio: 03 Jan 2006
- Poruke: 37
|
Da,da naravno!
Ovo je jedan Thread :
.
.
.
type
Tird = class(TThread)
private
{}
protected
{}
procedure UpdateText;
procedure Execute; override;
end;
implementation
uses Unit1;
procedure Tird.UpdateText;
var
I : Single;
begin
I:=0.00;
while I <= 1.00 do
begin
Form1.GLHUDText1.ModulateColor.Alpha :=I;
Form1.Caption := FloatToStr(I);
Application.ProcessMessages;
Sleep(50);
I:=I+0.01;
end;
end;
procedure Tird.Execute;
begin
Synchronize(UpdateText);
end;
.
.
.
Ovo je drugi :
type
Tirdovi = class(TThread)
private
{}
protected
{}
procedure UpdateStars;
procedure Execute; override;
end;
implementation
uses Unit1,GLBehaviours;
procedure Tirdovi.UpdateStars;
var
Inercija : TGLBInertia;
begin
Inercija := GetOrCreateInertia(Unit1.Form1.GLSkyDome1);
Inercija.PitchSpeed := 5.0;
Form1.GLSceneViewer1.Invalidate;
Application.ProcessMessages;
end;
procedure Tirdovi.Execute;
begin
Synchronize(UpdateStars);
end;
Hvala,pozdrav
Dopuna: 25 Maj 2006 12:23
Ovaj oko inercije sam pozivao na FormCreate a ovaj oko boje na btnClick.
Dopuna: 25 Maj 2006 12:26
Ovako sam ih pozivao,samo drugi ime za svaki Thread :
MojTird := Tird.Create(True);
MojTird.FreeOnTerminate := True;
MojTird.Resume;
Dopuna: 25 Maj 2006 12:27
Jos jedna dopuna
Hvala,pozdrav!
|
|
|
|
Poslao: 25 Maj 2006 11:50
|
offline
- Srki_82
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
type
Tird = class(TThread)
private
{}
protected
{}
I : Single;
procedure UpdateText;
procedure Execute; override;
end;
implementation
uses Unit1;
procedure Tird.UpdateText;
begin
Form1.GLHUDText1.ModulateColor.Alpha :=I;
Form1.Caption := FloatToStr(I);
end;
procedure Tird.Execute;
begin
I := 0.00;
while not Terminated do
begin
Synchronize(UpdateText);
Sleep(50);
I:=I+0.01;
if I > 1 then I := 0;
end;
end;
uses
GLBehaviours;
type
Tirdovi = class(TThread)
private
{}
protected
{}
Inercija : TGLBInertia;
procedure UpdateStars;
procedure Execute; override;
end;
implementation
uses Unit1;
procedure Tirdovi.UpdateStars;
begin
Inercija.PitchSpeed := 5.0;
end;
procedure Tirdovi.Execute;
begin
Inercija := GetOrCreateInertia(Unit1.Form1.GLSkyDome1);
while not Terminated do
begin
Synchronize(UpdateStars);
end;
end;
U OnCadencer eventu pozivaj Invalidate za SceneViewer.
Oba thread-a kreiraj na pocetku (OnCreate forme) i vise ne treba da mislis na njih. Ako hoces da ih zaustavis samo napisi MojTird.Terminated := True;
Ovo sam pisao iz glave pa ce mozda imati neku gresku.
|
|
|
|
Poslao: 25 Maj 2006 12:53
|
offline
- Pridružio: 03 Jan 2006
- Poruke: 37
|
OK,hvala,sad cu pogledam,bitna mi je ideja,kako od prilike.Hvala,pozzz
Dopuna: 25 Maj 2006 13:53
Malo sam prepravio ovo sa kretanjem,jer je kocilo :
procedure Tirdovi.UpdateStars;
begin
Inercija := GetOrCreateInertia(Unit1.Form1.GLSkyDome1);
Inercija.PitchSpeed := 15.0;
end;
procedure Tirdovi.Execute;
begin
Synchronize(UpdateStars);
end;
Jos jedno pitanje,mozemo li mi da zaustavimo Thread na ovako neki slican nacin,ili to radimo samo iz glavnog unit-a(Thread-a):
while not Terminated do
begin
.... neka promenjiva I sto se uvecava
if I=nesto then zaustavi Thread;
end;
Pozz
|
|
|
|
Poslao: 25 Maj 2006 18:41
|
offline
- Srki_82
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Thread se vrti sve dok je Terminated False... bilo gde postavi Terminated na True i thread ce lepo da se zaustavi:
while not Terminated do
begin
.... neka promenjiva I sto se uvecava
if I=nesto then Terminated := True;
end;
Dopuna: 25 Maj 2006 19:41
Samo jedno pitanje... zbog cega si koristio thread-ove za ovo?
|
|
|
|
Poslao: 26 Maj 2006 09:06
|
offline
- Pridružio: 03 Jan 2006
- Poruke: 37
|
Pa neznam,kocila mi slika posto se menjala boja slova,i pokretala mi se pozadina,pa sam pomislio da je resenje sa tirdovima.I sad sve lepo fino radi.Pokrece se i pozadina i menja se boja.
Pozdrav!
|
|
|
|
Poslao: 26 Maj 2006 09:51
|
offline
- Srki_82
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Ne znam koliko je pametno da pravis thread za svaki objekat koji se nekako menja (pozicija, materijal ili neke druge osobine). Ako imas neku vecu scenu sa par stotina objekata koje treba menjati, mozda ti kod cak i sporije radi sa thread-ovima.
Da li si razmisljao da uradis kod ovako?
https://www.mycity.rs/must-login.png
|
|
|
|
Poslao: 26 Maj 2006 13:26
|
offline
- Pridružio: 03 Jan 2006
- Poruke: 37
|
E od sad cu da razmisljam i tako da radim.
Hvala Srdjane,pozzzz
|
|
|
|