AGB  ·  Datenschutz  ·  Impressum  







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

TimeSetEvent / Canvas / Thread?

Ein Thema von HJay · begonnen am 1. Feb 2011 · letzter Beitrag vom 3. Nov 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 13:20
OnIdle wird, so wie es auch in der OH erwähnt wird, nur einmal ausgeführt, wenn alle anderen nstehenden Messages abgearbeitewt wurden.
Done = False sorgt dafür das das Event öfters kommt (solange bis man fertig ist und Done nicht mehr auf False setzt).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Aremo

Registriert seit: 24. Nov 2009
Ort: Aachen
9 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 13:35
Belastet "Sleep" nicht die CPU (while sleeping) ? Danke, werd's mal ausprobieren.

Delphi-Quellcode:
  
  repeat
    loopBeginTickCount := GetTickCount;
    // FBitmap mit neuem Frame bestücken, was auch immer das ist
    Synchronize(DrawFrame);
    Sleep(Max(MS_PER_FRAME - (GetTickCount-loopBeginTickCount), 1));
  until Terminated;
Gottfried Arens - Soft-dynamics.de
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#13

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 13:49
Nein, Sleep versetzt den aufrufenden Thread im Scheduler in einen "schlafenden" Status, und er wird erst wieder erweckt wenn dessen Timeout (der übergebene Wert in ms) abgelaufen ist. So lange ein Thread schläft, tut er einfach gornix, ausser ein Eintrag (unter vielen) im Scheduler zu sein.

Himi und Bummi: Warum wölltet ihr einen Thread hier so gerne meiden? Es ist kaum mehr Code, und der einzige, dafür flotte Zugriff auf das VCL Formular ist abgesichert. Dafür ist man hübsch entkoppelt, und wird auch dann nicht in die Bedrängnis kommen den GUI Thread zuzukleistern, wenn das Bildberechnen doch mal üppiger wird. Timer haben für mich fast immer einen Beigeschmack von Gefrickel und "so lange es gut geht, Glück gehabt". Gerade bei so kurzen Zykluszeiten! Und SO viel einfacher zu debuggen ist eine mit Timern vollgekleisterte Anwendung auch nicht wirklich
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#14

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 14:58
@Medium

Ich habe nichts gegen Thread, im Gegenteil, allerdings muss die Hauptarbeit auch im Thread stattfinden, da alle Canvaszugriffe Threadsave gemacht werden müssen macht es halt IMHO auch nur Sinn wenn nicht die Hauptarbeit darin besteht auf dem Canvas zu arbeiten.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#15

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 15:15
Ich hätte als Haupt"arbeit" hier angesehen, dass das (sehr kurze) Zeitintervall zwischen den Bildern möglichst konstant eingehalten wird. Dabei besteht die Arbeit natürlich hauptsächlich aus passend Warten, das ist wohl wahr Dafür erscheint mir der Scheduler aber durchaus auch zuverlässiger als die Messagequeue. Aber gut, bei so kleinen Aufgaben wirds dann fast mehr eine Glaubensfrage ob Thread oder Timer, wobei mir der Thread eben wegen der Flottheit des Intervalls zuverlässiger scheint. Letztlich ist das natürlich auch kein Garant, Windows ist ja (manchmal leider) kein RT OS.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 15:30
Hmm...

Die Hauptarbeit wird sicherlich das zeichen sein.

Allso zeichne im Thread auf eine TempBMP immer kontinuierlich und löse nur einen Event aus, wenn die Bitmap "fertig" ist.

Über Synconize wird leider immer die Hauptthread angehalten, daher würde ich eine Sendmessage erzeugen und in dieser dann lediglich die TempBMP auf den Canvas kopieren...

Grüsse Mavarik
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#17

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 15:42
Würde ich im Normalfall auch so tun, aber gerade bei Animationen kann einem die Messagequeue durchaus den Spaß verderben. Und ob ich nun synchronized oder durch eine Message ausgelöst zeichne - in beiden Fallen wird die selbe Arbeit im Hauptthread gemacht. (Und ein Bitmap auf einen Canvas blitten ist nicht wirklich zeitraubend, so lange man jetzt nicht über Full-HD redet.)
Aber grundsätzlich würde ich, wenn es nicht auf die Millisekunde ankommt, auch Notifications in Form von Messages nutzen. (Mache ich auch fast überall in meinen Projekten so.) Daher ein sehr berechtigter Einwand.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#18

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 15:42
@Mavarik

mach Dir mal den Spass mehrere Threads gleichzeitig auf TempBitmaps malen zu lassen und diese Synchronized irgendwo darzustellen/laden.

Ich hatte dabei 90% ausfälle bei den Bitmaps wenn kein Canvas.Lock verwendet wird, das letztlich fast mit dem Arbeiten im Haupthread gleichzusetzen ist ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#19

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 15:46
Das ist aber ein anderes Problem! Ich wäre nichtmals auf die Idee gekommen, mehrere Threads in das selbe Bitmap malen zu lassen
Für so etwas würde ich mein Bitmap in N Streifen unterteilen, einen Verwaltungsthread die eigentlichen Renderthreads starten, in diesem auf dessen Fertigwerden warten, dann die Streifen im Verwaltungsthread auf ein kombiniertes Bitmap zeichnen, und DAS dann auf den Bildschirm bringen. So hat jeder fein säuberlich seine eigenen Ressourcen, und keiner muss irgendwen locken. (Auch schon so gemacht, für nen Mulitiline/threaded Raytracer.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: TimeSetEvent / Canvas / Thread?

  Alt 2. Nov 2011, 15:51
@Mavarik

mach Dir mal den Spass mehrere Threads gleichzeitig auf TempBitmaps malen zu lassen und diese Synchronized irgendwo darzustellen/laden.
Naja so macht das mein Fernwartungsprogramm.

Da werden dann noch über mehrerer Threads die Teile der BMP erst gepackt und dann auf einen Server gestreamt...

Also denke ich ich weis wovon ich rede...

Mavarik
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 21:22 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