Delphi-PRAXiS
Seite 7 von 7   « Erste     567   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form in neuem Thread laufen lassen (https://www.delphipraxis.net/192420-form-neuem-thread-laufen-lassen.html)

jus 20. Jun 2017 22:13

AW: Form in neuem Thread laufen lassen
 
Zitat:

Zitat von jaenicke (Beitrag 1374927)
Es funktioniert nun mit allen Versionen ab Delphi 7, allerdings musste ich für Delphi 2009 die Benutzung von Generics deaktivieren, da ich dafür keine Zeit investieren wollte. Sprich Generics kommen erst ab Delphi 2010 zum Einsatz. Und auch da waren noch Tricks nötig.

Fazit:
Wer Generics wirklich gut nutzen möchte, sollte sich schon überlegen eine aktuelle Delphiversion zu nutzen. Selbst bei einem so simplen Beispiel stößt man ohne Tricks noch selbst bei XE6 an Grenzen...

@jaenicke: Wow, läßt nun auch in Delphi 2007 kompilieren, habe es gerade ausprobiert. Vielen vielen Dank! :-D

lg,
jus

jaenicke 20. Jun 2017 22:20

AW: Form in neuem Thread laufen lassen
 
Gerne ;-)
Im Moment habe ich z.B. das Problem, dass bei dynamischer Erzeugung die Komponenten erst sichtbar werden, wenn ich mit der Maus drüber gehe oder z.B. der Fortschritt der Progressbar geändert wird.
Wenn da jemand eine Idee hätte... ;-)

Purri 26. Jul 2017 14:52

AW: Form in neuem Thread laufen lassen
 
Hallo zusammen,

ich bin auf euer wunderbares Projekt (ein dickes DANKE von mir :-D) gestoßen, weil ich eine Möglichkeit suche eine Aktivitätsanzeige einzublenden, auch wenn im Hauptthread Stillstand herrscht. Ich habe hier zum Teil größere Datenbankoperationen, die ich leider nicht in eigene Threads auslagern kann.

Nun schaue ich mir grade die Demo an und bin dabei auf folgendes gestoßen:

- Unter XE5 kompiliert bei mir keine Datei ( Konnte ich lösen, indem ich bei den Uses "Winapi." vor "Windows" und "Messages" geschrieben habe. Meiner Meinung nach sollte es in XE5 aber auch ohne "Winapi" funktionieren, kann also mein Fehler sein.

- Ich verstehe die Kompilerbedingungen so, das "Delphi2010up" auch von XE5 ausgelöst werden sollte. Das ist, zumindest bei mir, nicht der Fall.

Grüße
Jan

jaenicke 26. Jul 2017 15:53

AW: Form in neuem Thread laufen lassen
 
Zitat:

Zitat von Purri (Beitrag 1377521)
- Unter XE5 kompiliert bei mir keine Datei ( Konnte ich lösen, indem ich bei den Uses "Winapi." vor "Windows" und "Messages" geschrieben habe. Meiner Meinung nach sollte es in XE5 aber auch ohne "Winapi" funktionieren, kann also mein Fehler sein.

Dann fehlt in deinen Projektoptionen der Namespace Winapi. Ich schaue mal, dass ich das per IFDEF löse.

Zitat:

Zitat von Purri (Beitrag 1377521)
- Ich verstehe die Kompilerbedingungen so, das "Delphi2010up" auch von XE5 ausgelöst werden sollte. Das ist, zumindest bei mir, nicht der Fall

Teste ich, muss dafür aber erst eine VM mit XE5 einrichten.

jaenicke 26. Jul 2017 21:09

AW: Form in neuem Thread laufen lassen
 
Ich habe beides bearbeitet. Wenn du neu auscheckst, sollte das passen.

Purri 27. Jul 2017 07:15

AW: Form in neuem Thread laufen lassen
 
Klappt wunderbar. Danke :-D

Purri 27. Jul 2017 13:58

AW: Form in neuem Thread laufen lassen
 
Nochmal ich :?

Eigentlich sollte n der Thread und sein Fenster doch weiterarbeiten, wenn der Hauptthread steht, oder?
Ich habe in der Demo testweise auf dem Hautpformular einen Button mit einem
Delphi-Quellcode:
Sleep(5000);
eingebaut. Wenn ich dies ausführe, während der Thread läuft, bleiben Thread und Threadfenster stehen. Interessanterweise aber nicht sofort: Die "j-Schleife" läuft immer noch zu Ende durch. :wiejetzt:

Kann mir einer von euch erklären, was hier passiert:?:

Edit: Ein Sleep im Hauptthread hält natürlich alles an, aber warum läuft die "j-Schleife" dann weiter?

jaenicke 27. Jul 2017 17:01

AW: Form in neuem Thread laufen lassen
 
Weil die innere Schleife die Fortschrittsanzeige nicht aktualisiert und deshalb keine Messages braucht.

So ist das auch nicht gedacht. Gedacht ist das so, dass du einen eigenen Thread hast, der die Verarbeitung durchführt und die GUI ansteuert. Innerhalb der GUI-Events sollte nichts passieren außer den Aufruf an den Verarbeitungsthread weiterzugeben. Dieser separate Thread kann dann auch problemlos Sleep aufrufen.

Hintergrund ist, dass auch die Messages für die einzelnen Fenster in der Main-Messageloop ankommen und diese so blockiert, wenn eine Messagebehandlung (wie für den Knopfdruck) länger dauert. Vielleicht lässt sich das auch noch sauberer trennen. Freiwillige vor. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.
Seite 7 von 7   « Erste     567   

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