![]() |
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??? |
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:
Das geht natürlich nicht, der Hauptthread braucht ja auch ab und zu mal die Zugrifsrechte:
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;
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; |
Re: timer zu langsam?
Und was machen die anderen Threads in der Zeit wo das Canvas "gelockt" ist???
schlafen oder einfach das "gelockte" überspringen??? |
Re: timer zu langsam?
Normalerweise sollten die warten.
Da sollten wir aber mal sicherheitshalber einen Threadexperten fragen. |
Re: timer zu langsam?
Meldet euch ihr Threadexperten!!! ;)
|
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 :( |
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. |
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. |
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