<font size="2" face="Verdana">Hallo<br>
ich möchte mir eine Komponete (TGraphicControl) schreiben,<br>
die während einer längeren Datenbankabfrage anzeigt, dass etwas<br>
passiert. Es läuft z.B. ein kleines Rechteck von links nach
rechts<br>
und wieder zurück. Damit sich die Komponente auch zeichnet
erzeugt<br>
Sie einen Thread. Innerhalb der Execute Methode (siehe Code) rufe
ich dann<br>
Zeichenmethode der Komponente auf. Wenn ich dafür Synchronize
verwende<br>
passiert gar nichts. Benutze ich hingegen eine CriticalSection
zeichnet<br>
sich die Komponente während der Datenbankabfrage. Ist der
Zugriff auf die VCL<br>
innerhalb einer CriticalSection genau so sicher wie mit<br>
Synchronize? Außerdem gibt es ein Problem, wenn die Komponente<br>
auf einem anderen Formular sitzt. D.h. wenn ich eine zweite Form<br>
anzeige und dort die Datenbankabfrage starte, zeichnet sich die<br>
Komponate nicht neu ?!? TAnimate kann das. </font></p>
<br>
<pre>
</code><font color="#800000" size="2" face="Verdana"><code><b>procedure</b></code></font><font
size="2" face="Verdana"><code> TGaugeThread.Execute;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>begin</b></code></font><font
size="2" face="Verdana"><code>
</code></font><font color="#800000" size="2" face="Verdana"><code><b>While</b></code></font><font
size="2" face="Verdana"><code> </code></font><font
color="#800000" size="2" face="Verdana"><code><b>Not</b></code></font><font
size="2" face="Verdana"><code> Terminated </code></font><font
color="#800000" size="2" face="Verdana"><code><b>do</b></code></font><font
size="2" face="Verdana"><code>
</code></font><font color="#800000" size="2" face="Verdana"><code><b>begin</b></code></font><font
size="2" face="Verdana"><code>
CS.Enter;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>Try</b></code></font><font
size="2" face="Verdana"><code>
GetInterval;
FGauge.PaintGauge;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>Finally</b></code></font><font
size="2" face="Verdana"><code>
CS.Leave;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>end</b></code></font><font
size="2" face="Verdana"><code>;
Sleep(FInterval);
</code></font><font color="#800000" size="2" face="Verdana"><code><b>end</b></code></font><font
size="2" face="Verdana"><code>;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>end</b></code></font><font
size="2" face="Verdana"><code>;</code></font><code>
</pre>
<p><br>
<font size="2" face="Verdana">:-) Jens Schumann </font></p>
ich möchte mir eine Komponete (TGraphicControl) schreiben,<br>
die während einer längeren Datenbankabfrage anzeigt, dass etwas<br>
passiert. Es läuft z.B. ein kleines Rechteck von links nach
rechts<br>
und wieder zurück. Damit sich die Komponente auch zeichnet
erzeugt<br>
Sie einen Thread. Innerhalb der Execute Methode (siehe Code) rufe
ich dann<br>
Zeichenmethode der Komponente auf. Wenn ich dafür Synchronize
verwende<br>
passiert gar nichts. Benutze ich hingegen eine CriticalSection
zeichnet<br>
sich die Komponente während der Datenbankabfrage. Ist der
Zugriff auf die VCL<br>
innerhalb einer CriticalSection genau so sicher wie mit<br>
Synchronize? Außerdem gibt es ein Problem, wenn die Komponente<br>
auf einem anderen Formular sitzt. D.h. wenn ich eine zweite Form<br>
anzeige und dort die Datenbankabfrage starte, zeichnet sich die<br>
Komponate nicht neu ?!? TAnimate kann das. </font></p>
<br>
<pre>
</code><font color="#800000" size="2" face="Verdana"><code><b>procedure</b></code></font><font
size="2" face="Verdana"><code> TGaugeThread.Execute;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>begin</b></code></font><font
size="2" face="Verdana"><code>
</code></font><font color="#800000" size="2" face="Verdana"><code><b>While</b></code></font><font
size="2" face="Verdana"><code> </code></font><font
color="#800000" size="2" face="Verdana"><code><b>Not</b></code></font><font
size="2" face="Verdana"><code> Terminated </code></font><font
color="#800000" size="2" face="Verdana"><code><b>do</b></code></font><font
size="2" face="Verdana"><code>
</code></font><font color="#800000" size="2" face="Verdana"><code><b>begin</b></code></font><font
size="2" face="Verdana"><code>
CS.Enter;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>Try</b></code></font><font
size="2" face="Verdana"><code>
GetInterval;
FGauge.PaintGauge;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>Finally</b></code></font><font
size="2" face="Verdana"><code>
CS.Leave;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>end</b></code></font><font
size="2" face="Verdana"><code>;
Sleep(FInterval);
</code></font><font color="#800000" size="2" face="Verdana"><code><b>end</b></code></font><font
size="2" face="Verdana"><code>;
</code></font><font color="#800000" size="2" face="Verdana"><code><b>end</b></code></font><font
size="2" face="Verdana"><code>;</code></font><code>
</pre>
<p><br>
<font size="2" face="Verdana">:-) Jens Schumann </font></p>
Comment