Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi timer zu langsam? (https://www.delphipraxis.net/13895-timer-zu-langsam.html)

SleepyMaster 28. Dez 2003 21:32

Re: timer zu langsam?
 
OK! Bei 200 Threads hatte ich auch ein Problem!
100 gingen noch!

Aber mal im ernst:
Man kanns auch übertreiben!
:zwinker:

Aber trozdem:
Wie würde es denn mit syncronisieren aussehen??? (Also mein Quelltext)
Arbeite zwar oft mit Threads, hab das Syncronisieren mir aber immer nur hingefuddelt!
Was gibt es da für Möglichkeiten???

himitsu 28. Dez 2003 21:50

Re: timer zu langsam?
 
Selber hab ich mich bisher sehr erfolgreich um Threads herumgemogelt, hab also nur wenig Erfahrung mit Synchronisieren.

Das dürfte aber in etwa so aussehen:
Delphi-Quellcode:
While True do Begin
  Sleep(1);

  {Zugriff für andere Threads auf das Canvas sperren, auch für den Haupttread}
  Form1.Canvas.Lock;

  {auf Canvas zeichnen}
  Form1.Canvas.Pixels[Random(Form1.ClientWidth), Random(Form1.ClientHeight)] := clRed;

  {Zugriff wieder freigeben}
  Form1.Canvas.UnLock;
End;
Das geht natürlich nicht, der Hauptthread braucht ja auch ab und zu mal die Zugrifsrechte:
Delphi-Quellcode:
{Zugriff für andere Threads auf das Canvas sperren, auch für den Haupttread}
Form1.Canvas.Lock;

While True do Begin
  Sleep(1);

  {auf Canvas zeichnen}
  Form1.Canvas.Pixels[Random(Form1.ClientWidth), Random(Form1.ClientHeight)] := clRed;
End;

{Zugriff wieder freigeben}
Form1.Canvas.UnLock;

SleepyMaster 28. Dez 2003 22:06

Re: timer zu langsam?
 
Und was machen die anderen Threads in der Zeit wo das Canvas "gelockt" ist???
schlafen oder einfach das "gelockte" überspringen???

himitsu 28. Dez 2003 22:21

Re: timer zu langsam?
 
Normalerweise sollten die warten.

Da sollten wir aber mal sicherheitshalber einen Threadexperten fragen.

SleepyMaster 28. Dez 2003 22:22

Re: timer zu langsam?
 
Meldet euch ihr Threadexperten!!! ;)

Pseudemys Nelsoni 28. Dez 2003 22:51

Re: timer zu langsam?
 
hoi,

sleepymaster dein beispiel ist genau das was ich möchte! aber leider kommt immer ein fehler wenn ich minimiere/wiederherstelle oder doe form ausserhalb des bildschirmrandes schiebe.
project...hat einen fehler veursacht :(

himitsu 29. Dez 2003 08:59

Re: timer zu langsam?
 
@Nelsoni,
das ist genau das Problem, was ich meine.

Wenn mehrere Threads gleichzeitig auf einen nicht threadsicheren Bereich zugreifen, dann kommt dieser Fehler.
Hier greifen eben der Thead (Pixel zeichnen) und der Hauptthread (Fenster neuzeichnen) gleichzeitig schreibend auf das Canvas zu und stören sich gegenseitig.
Das ist so, als wenn man zwei Fahrer an ein Lenkrad setzt und der eine nach links und der andere nach rechts will.

SleepyMaster 29. Dez 2003 11:02

Re: timer zu langsam?
 
Dann schreib den Thread halt so um:

Delphi-Quellcode:
procedure Thread;
begin
try
while run do
  begin
  x:=x+1;
  if Form1.SpinEdit2.Value<>0 then
    sleep(Form1.SpinEdit2.Value);
  Form1.Canvas.Lock;  //  von himitsu
  Form1.canvas.Pixels[Random(form1.Width), Random(Form1.Height)] := clRed;
  Form1.Canvas.UnLock; //  von himitsu
  end;
except end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz