AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

timer zu langsam?

Ein Thema von Pseudemys Nelsoni · begonnen am 28. Dez 2003 · letzter Beitrag vom 29. Dez 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#11

Re: timer zu langsam?

  Alt 28. Dez 2003, 22:32
OK! Bei 200 Threads hatte ich auch ein Problem!
100 gingen noch!

Aber mal im ernst:
Man kanns auch übertreiben!


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???
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.076 Beiträge
 
Delphi 12 Athens
 
#12

Re: timer zu langsam?

  Alt 28. Dez 2003, 22:50
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#13

Re: timer zu langsam?

  Alt 28. Dez 2003, 23:06
Und was machen die anderen Threads in der Zeit wo das Canvas "gelockt" ist???
schlafen oder einfach das "gelockte" überspringen???
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.076 Beiträge
 
Delphi 12 Athens
 
#14

Re: timer zu langsam?

  Alt 28. Dez 2003, 23:21
Normalerweise sollten die warten.

Da sollten wir aber mal sicherheitshalber einen Threadexperten fragen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#15

Re: timer zu langsam?

  Alt 28. Dez 2003, 23:22
Meldet euch ihr Threadexperten!!!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#16

Re: timer zu langsam?

  Alt 28. Dez 2003, 23:51
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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.076 Beiträge
 
Delphi 12 Athens
 
#17

Re: timer zu langsam?

  Alt 29. Dez 2003, 09:59
@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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#18

Re: timer zu langsam?

  Alt 29. Dez 2003, 12:02
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz