Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 26.04.06 10:58 
Hallo, ich habe eine Aufwendige Grafikoperation in den Thread ausgelagert,
es funzt auch soweit wunderbar beim ersten Zeichnen aber nicht immer vollständig

Weil die Execute Procedur nicht immer wieder aufgerufen wurde, habe ich den Thread
immer nur dan neu erzeugt wenn die Grafikoperation ausgeführt werden soll.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type

Painter = class(TThread)
...
public
   procedure Execute; override;
end;

implementation

procedure TPainter.Execute;
begin
   with TForm1 do
   begin
   ...  // Grafkoperationen
   ...  // Ich führe Operationen auf ein unsichtaberes Img aus und dann kopiere ich die in die sichtbare
   PainterTerminated := True;
   Img.Refresh;  // Img änderung auf dem Bildschirm refreshen
   end;
end;

procedure OnParamsChange(..);
begin
   if(PainterTerminated)then  // PainterTerminated ist eine Boolean Variable
   begin  
     PainterTerminated := False; // False setzen, damit der Painter nicht neu erzeugt wird, bis er nicht bis Execute ausgeführt 
     Painter.Create(True);
     Painter.FreeOnTerminate := True;
     Painter.Resume;
   end;
end;


Das Zeichnen funzt nur beim erstenmal einwandfrei.
Das Problem ist, dass die Grafikoperationen bei einer Änderung auf dem Bildschirm sich nicht bemerkbar machen
nur wenn ich die Parameter von vornherein ändere dann zeigt sich die Änderung nur beim ersten Zeichnen.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 26.04.06 11:30 
Moin!

Die VCL ist nicht threadsave, du mußt mit Synchronize() arbeiten.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 26.04.06 11:49 
user profile iconNarses hat folgendes geschrieben:
Moin!

Die VCL ist nicht threadsave, du mußt mit Synchronize() arbeiten.

cu
Narses


Was heist das jetzt genau, VCL ist nicht Threadsave? Muß ich mit API Arbeiten?

also im Grunde genommen mache ich es folgendermassen.

1. Es ist ein geladenes Picture in AImg

2. mit Stretchdraw zeichne ich von AImg in Temporäre Image
...--> Stretchdraw ergebnis in sichtbare Image mit Draw reinzeichnen/darstellen

3. ich führe die Grafikoperationen auf das Temporäre Image aus
...--> Grafikoperation mit Draw in sichtbare Image reinzeichnen/darstellen

4. weitere Grafikoperationen auf Temporäre Image
...--> Grafikoperation mit Draw in sichtbare Image reinzeichen/darstellen

das mache ich alles in der Execute Procedure
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 26.04.06 12:05 
user profile iconJRegier hat folgendes geschrieben:
Was heist das jetzt genau, VCL ist nicht Threadsave?

Was das genau heißt, steht in der DOH, bist doch kein Anfänger mehr... :roll:

_________________
There are 10 types of people - those who understand binary and those who don´t.
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 26.04.06 12:36 
user profile iconNarses hat folgendes geschrieben:
user profile iconJRegier hat folgendes geschrieben:
Was heist das jetzt genau, VCL ist nicht Threadsave?

Was das genau heißt, steht in der DOH, bist doch kein Anfänger mehr... :roll:


Woher willst denn das wissen, dass ich kein Anfänger bin?

Wie lange muß ich mich mit Delphi beschäftigt haben um nicht als Anfänger, bezeichnet zu werden?
Also ich schätze mal, ich habe insgesammt 1 Jahr Erfahrung.