AGB  ·  Datenschutz  ·  Impressum  







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

FireMonkey Sammelthread

Ein Thema von mquadrat · begonnen am 1. Sep 2011 · letzter Beitrag vom 27. Jul 2013
Antwort Antwort
Seite 20 von 20   « Erste     10181920   
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#191

AW: FireMonkey Sammelthread

  Alt 16. Jul 2013, 01:21
@Thom

Ohne ProcessMessages klappt das bei mir nicht.
Anbei mal ein Testprojekt (XE3, ohne Exe) im Baustellenstatus.

Ich habe auch mal versucht, das Refresh in einen Thread zu packen.
Aber auch hier wird man ohne Syncronisation nicht weiter kommen.
In dem Fall könnte aber Invalidate reichen, wie ich es in meinem Framework einsetze.
Angehängte Dateien
Dateityp: zip TestAni.zip (101,0 KB, 7x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (16. Jul 2013 um 10:10 Uhr) Grund: Anhang ergänzt (obwohl ich sicher bin, dass ich heute Nacht...)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#192

AW: FireMonkey Sammelthread

  Alt 16. Jul 2013, 15:40
@Stahli

Mit Threads sollte das nicht funktionieren. Soweit ich weiß, ist die GUI von FireMonkey auch nicht threadsicher. Sie baut unter Windows ebenfalls auf GDI auf, auch wenn einige Renderaufgaben von der Grafikkarte übernommen werden. Die vorgerenderten Abschnitte werden dann aber wieder als Bitmap zurück in den Hauptspeicher geholt und "ganz normal" angezeigt. Meiner Meinung nach ist dieses Konzept auch der Hauptgrund, weshalb trotz GPU-Unterstützung die Framerate unter FireMonkey so - ähmmm - verbesserungswürdig ist. Falls ich das falsch verstanden habe, kann mich jemand gern korrigieren. Ich hatte mir dieses Prinzip vor allem bei den Filtern bzw. Effekten angeschaut.

Um also die Oberfläche eines Formulars während lang andauernden Aktionen nicht einfrieren zu lassen, muß die Aktualisierung aktiv angestoßen oder die blockierenden Aktionen in einen Thread ausgelagert werden. In dieser Beziehung unterscheiden sich VCL und FireMonkey nicht.

Die Synchronisation von Threads geschieht über das Senden von Nachrichten:
Delphi-Quellcode:
unit FMX.Platform.Win;

procedure TPlatformWin.WakeMainThread(Sender: TObject);
begin
  if TThread.CurrentThread.ThreadID <> MainThreadID then
    PostMessage(FThreadSyncHandle, WM_NULL, 0, 0);
end;
Und solange diese nicht (vom Hauptthread) abgeholt werden, passiert hier ebenfalls nichts.

Ich schaue mir mal Dein Testprojekt an.

Ok. Gerade gemacht. Funktioniert doch auch ohne ProcessMessages... Das Problem in Deiner Demo ist, daß Du ProgressBar1.Max auf 100000 setzt. Damit da etwas Sichtbares passiert, brauchst Du einige Liter Kaffee.
Mit Sleep(50) hast Du rund 20 Schritte pro Sekunde. Macht für den gesamten Fortschrittsbalken 100000/20=5000 Sekunden oder 83,3 Minuten.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (17. Jul 2013 um 02:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#193

AW: FireMonkey Sammelthread

  Alt 17. Jul 2013, 22:47
@ Thom

Danke für Deine Mühe.
Bin gerade noch mit meinem neuen Rechner beschäftigt. Delphi installiere ich als nächstes mit.

In meinem Testprojekt hatte ich zuerst nur ein Label getestet. Aus dem Test stammt die hohe Durchlaufzahl.
Da habe ich ohne ProcessMessages keinen Fortschritt gesehen. Später dann mit Progressbar und AniIndicator auch nicht.
Vielleicht hängt das auch von der Grafikkarte oder Leistungsfähigkeit des Systems ab?

Die Abläufe im FMX habe ich teilw. auch mal nachvollzogen, aber dann schnell aufgegeben.
Es wirkt alles sehr umständlich bis planlos.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#194

AW: FireMonkey Sammelthread

  Alt 20. Jul 2013, 20:55
@Stahli

Entschuldige bitte die verspätete Antwort - ich wurde in den vergangenen Tagen anderweitig beansprucht...

So ein Schrott: Das scheint tatsächlich von der Grafikkarte/dem Betriebssystem abhängig zu sein. Bei meinem Netbook funktioniert das Update des Formulars ebenfalls nicht. Da muß ich noch mal etwas Zeit investieren, um dem Problem auf den Grund zu gehen.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#195

AW: FireMonkey Sammelthread

  Alt 21. Jul 2013, 01:09
Entschuldige bitte die verspätete Antwort - ich wurde in den vergangenen Tagen anderweitig beansprucht...
Klingt so, als dürfte man sich für Dich freuen, was hiermit getan sei.

So ein Schrott: Das scheint tatsächlich von der Grafikkarte/dem Betriebssystem abhängig zu sein. Bei meinem Netbook funktioniert das Update des Formulars ebenfalls nicht. Da muß ich noch mal etwas Zeit investieren, um dem Problem auf den Grund zu gehen.
Naja, ich weiß nicht ob sich das wirklich lohnt. Jemand mit Kompetenz und Interesse müsste denen wohl FMX abkaufen und komplett überarbeiten.
Alles andere wird Stückelei, wo man auch wieder nicht weiß, in welchen Fällen die Flicken helfen und wo nicht.

Ich werde erst mal mein Framework weiter mit FMX entwickeln aber mit einer möglichst reduzierten GUI.
Ich behalte aber unbedingt im Blick, das Ganze mal auf VCL (und/oder FMY?) zu portieren.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#196

AW: FireMonkey Sammelthread

  Alt 27. Jul 2013, 14:11
So ein Schrott: Das scheint tatsächlich von der Grafikkarte/dem Betriebssystem abhängig zu sein. Bei meinem Netbook funktioniert das Update des Formulars ebenfalls nicht. Da muß ich noch mal etwas Zeit investieren, um dem Problem auf den Grund zu gehen.
Nee, es ist doch alles in Ordnung. Man braucht nur ein Win8 64bit und FMX refresht super - wenn man zu Hilfsmitteln greift.
Wenn es auf bestimmten Systemen doch nicht unter Win8 64bit klappt, kann ich noch meine anderen Systemkomponenten aufzählen.
Aber inzwischen wird ja ohnehin fast nur noch für iPhone entwickelt, jedenfalls dem Eindruck nach...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 20 von 20   « Erste     10181920   


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 10: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