AGB  ·  Datenschutz  ·  Impressum  







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

CreateForm threaded?

Ein Thema von spacerunner · begonnen am 16. Okt 2006 · letzter Beitrag vom 17. Okt 2006
Antwort Antwort
spacerunner

Registriert seit: 16. Okt 2006
4 Beiträge
 
#1

CreateForm threaded?

  Alt 16. Okt 2006, 17:48
Hallo leute,

ich stehe vor folgendem problem:
ich habe ein relativ komplexes fenster, dessen erzeugung immer zur laufzeit passiert. und das öfters, denn ich kann mehrer dieser forms gleichzeitig öffnen. nun dauert die erstellung tform.create() schon ganz schön lange. ich suche nach einer möglichkeit, die forms "vorab" dynymisch zu erstellen und beim aufruf einfach zu aktivieren. ich packe deshalb die ganze create-prozedur in eine funktion, die einen thread startet, welcher quasi die nächste instanz schon erzeugt.

nun, ansich geht das sogar - fast. denn: es funktioniert nur, wenn im thread mit synchronize(machmeinfenter) gearbeitet wird. damit ist der sinn wieder weg, denn der haupt-thread locked nun wieder solange, wie Tform.Create braucht.

seltsamerweise bekomme ich OHNE synchronize keine exception während der erzeugung des formulars. erst wenn ich das formular (später) per tform.show öffnen will, raised es los.

alles scheint eigentlich zu funzen - handle ist da, daten sind da. und doch geht es nicht.

ideen?

vielen dank!
stefan.-
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: CreateForm threaded?

  Alt 16. Okt 2006, 17:59
Das was du machst geht einfach nicht!

Alles was mit VCL und Windows-Handles zu tun hat muß im Haupt-Thread der Anwendung erfolgen!
Dazu gibt es (mir bekannte) Alternative.

Was du machen könntest wäre geschlossene Fenster "zu recyclen" also nicht komplett neu erstellen zu lassen sondern auf einen Cache zu legen um bei bedarf davon zu holen. Mußt jedoch 100ige Init-Funktionen haben und kannst dich nicht mehr aufs DFM-Streaming verlassen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
spacerunner

Registriert seit: 16. Okt 2006
4 Beiträge
 
#3

Re: CreateForm threaded?

  Alt 16. Okt 2006, 19:27
hallo bernhard,

ich habe mir schon etwas gedacht. leider brachte mein versuch, die TForm als komponente in einen stream zu verpacken, auch nicht die gewünschte wirkung. die ladezeit war nach einem LoadFromStream() annähern genau so lange wie ein create() selbst.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: CreateForm threaded?

  Alt 16. Okt 2006, 20:43
Hallo,

versuche doch mal rauszubekommen,
wo genau dein Form so lange braucht.
Sind es Datenbank-Routinen,
grosse Bitmaps ?

Dass kann man alles einmalig laden,
und dann wiederverwenden.


Heiko
Heiko
  Mit Zitat antworten Zitat
spacerunner

Registriert seit: 16. Okt 2006
4 Beiträge
 
#5

interessant, interessant

  Alt 17. Okt 2006, 16:47
hallo bernhard,

nachdem ich mich ein bischen intensiver mit der thematik befaßt habe, habe ich mich entschlossen, deinen vorschlag mal genauer unter die lupe zu nehmen. ich habe mir eine klasse geschrieben, die forms quasi "cached" generiert, sprich nach Close() auf einem stack ablegt und bei bedarf popt. weil eben die VCL nicht threadsicher ist, soviel hatten wir ja schon.

interessanterweise bin ich dabei auf exakt das gleiche cache-verhalten bei MS outlook gestoßen. Die anwendung, an der ich gerade arbeite, zeigt (ähnlich wie outlook) so eine art "Karteikarten" für adress/Kundeneinträge. das outlook-pendant dazu sind "Kontakte".

in outlook kann man genau das gleiche beobachten: öffnest Du ein Kontakt-fenster, dauert es ein stück. öffnest Du das zweite, ebenfalls, so mit dem dritten. Machst du aber eins wieder zu und das nächste auf - blitz, die form ist da. genauso verhält es sich mit den fensterpositionen. wird alles LIFO gecached
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:19 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