Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Zamrzanie pri pouziti vo vlakne

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Zamrzanie pri pouziti vo vlakne

Autor: JaroB

15:23:48 07.05.2011

kdybych to dělal já, tak bych asi netlačil dxdraw do vlákna. Ve vláknu bych ponechal pouze ten výkonný kód, který má vliv na kreslení. Ale vlastní kreslení bych soustředil v OnTimer, kde bych převzal vlasnosti nastavené ve vlákně a podle nich na nějaký semafor vykresloval (a použil bych jako základ standardní kód z prototypového souboru). Obdobně jsem kdysi viděl nějak tak udělané vykreslování do několika viewportů.

Citovat příspěvek

 

Re: Zamrzanie pri pouziti vo vlakne

Autor: hybr1D

19:37:35 02.05.2011

Tak som to vyskúšal ale stále to zamŕza. Tento raz pri Destroy vlákna. Keď som nepristupoval vôbec k DXDrav z vlákna, tak to šlo v pohode. Ja ale potrebujem pracovať s tým DXDraw vo vlákne. :S

Citovat příspěvek

 

Re: Zamrzanie pri pouziti vo vlakne

Autor: hybr1D

16:07:31 02.05.2011

Ďakujem skusím. To vlákno je:

TKresli = class(TThread)

Private
retazec: String;
plocha: TDXDraw;
PocetUhlov: SmallInt;
poleBodov: Array [0..100000] of TPoint;
premenne: Array [0..3] Of String;
level, aktLvl, vek: Int64;
kresli, zrastanie, stop, simulacia: Boolean;
poleZasobnik: Array of Word;
poleLevelov: Array of PLevel;
PocetKrokov: Word;
Kolizia: PKolizia;
Pfarba: TColor;

uhol,velkostuhla, starnutie:SmallInt;
x,y:Integer;
radian:real;
polKol: Byte;
Pdlzka: Byte;
bod:Int64;

procedure nakresli;
procedure vypocitaj;
procedure zasobnik(pridaj:boolean; var bodik:int64);
function Fkolizia(x,y:Word; out Xx, Yy: Word):Integer;
Procedure SetPK(pockrok:Word);
Procedure SetPolomerK(PK: Byte);
Function GetPolomerK:Byte;
procedure SetFarba(f: TColor);
procedure SetDlzka(d:Byte);

Public

constructor Vytvor(Asoma, x, y ,z: String; PU: SmallInt);
destructor Destroy;override;
procedure SetCanvas(c:TDXDraw; CX,CY: Integer);
procedure SetZrastanie(Z:Boolean);

property pockrok:Word write SetPK;
property polomerKolizie:Byte read GetPolomerK write SetPolomerK;
property Farba: TColor Write SetFarba;
property Dlzka: Byte Write SetDlzka;
property SStop: Boolean Write stop;
property SStarnutie: SmallInt Write starnutie;
property SSimulacia: Boolean Write simulacia;

Protected
procedure Execute; override;

end;

Citovat příspěvek

 

Re: Zamrzanie pri pouziti vo vlakne

Autor: JaroB

15:55:04 02.05.2011

jak je přesně definováno vlákno TKresli?
V případě DelphiX je asi vhodné použít doporučený postup. Ve vlákně např. vypočítat souřadnice pro kreslení a tak - ale vykreslovat jen v hlavním vlákně události OnTimer nebo vykreslovat do pomocných listů a teprve po dokončení kreslení tyto mezi-obrázky kreslit na surface.

Citovat příspěvek

 

Zamrzanie pri pouziti vo vlakne

Autor: hybr1D

9:48:14 02.05.2011

Zdravím.
Mám formulár, na ktorom je DXDraw. Mám potom vlastnú triedu vlákna TKresli, kde mám premennú plocha:TDXDraw. Pri pokuse o vykreslenie mi to zamrzá a netuším prečo. Dostane sa to až po Release a tam to zatuhne. Moc vás prosím o radu. Tu je kód:

procedure TKresli.Execute;
Begin

While (poleLevelov[0].c <= length(premenne[0])) and (not stop) Do
Begin

vypocitaj;
if(kresli) Then Synchronize(nakresli);

end;

end;


procedure TKresli.nakresli;
Begin

With plocha.Surface.Canvas Do
Begin
Pen.Color := PFarba;
moveto(poleBodov[bod].x,poleBodov[bod].Y);

if simulacia Then
Begin
Case level of
0: Pen.Width := 4;
1: Pen.Width := 3;
2: Pen.Width := 2;
3: Pen.Width := 1;
end;
end;

LineTo(x,y);
Release; <-- tu to tuhne
end;

plocha.Flip;
end;

Ďakujem veľmi pekne.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: