AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Fehlermeldung "Element hat kein übergeördnetes Fenster"
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung "Element hat kein übergeördnetes Fenster"

Ein Thema von DevidEspenschied · begonnen am 18. Feb 2009 · letzter Beitrag vom 23. Feb 2009
Antwort Antwort
Seite 3 von 4     123 4      
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#21

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 13:09
Zitat von quendolineDD:
Und du solltest auch strikt VCL und Threads voneinander trennen. Die Threads machen keinen Sinn wenn du andauernd über Synchronize auf den Mainthread zugreifst.
Das Problem hier im Test und später in der produktiven Anwendung ist ja, dass der Thread seine Arbeit verrichtet und die Ergebnisse in einem Memo schreiben muss. Insofern ist eine Verknüpfung zwischen Thread und VCL leider nicht wegzudenken, zumindest in meinem Fall. Mit der private Deklaration eines Memos innerhalb des Threads habe ich das aber hoffentlich effektiv gelöst. Oder ist das eher kontraproduktiv ? Wie könnte man es sonst umsetzen ?
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#22

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 13:34
Und wenn du dir zur Synchronisation einen Container baust, der alle Threads beherbergt und verwaltet? Das wäre glaube sinnvoller als für jeden Thread aufgrund einer anderen ID eine eigene Klasse zu schreiben
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 13:57
Du hast doch in dem BEispiel 3 Threads, wleche im Grunde alle das Selbe machen, ist das in der "produktiven" Anwendung später auch so?

Denn so wie es jetzt ist, könnte mann alle Threads durch eine Thread-Klasse ersetzten.
$2B or not $2B
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#24

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 14:34
Zitat von himitsu:
Du hast doch in dem BEispiel 3 Threads, wleche im Grunde alle das Selbe machen, ist das in der "produktiven" Anwendung später auch so?

Denn so wie es jetzt ist, könnte mann alle Threads durch eine Thread-Klasse ersetzten.
Nein, die Threads erfüllen später unterschiedliche Aufgaben, nur eben für diese Beispielanwendung habe ich es einfach gehalten.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 14:36
Dann schreibe dir eine Containerklasse, die die Threads verwaltet und die Ausgabe übernimmt.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#26

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 14:39
Zitat von quendolineDD:
Dann schreibe dir eine Containerklasse, die die Threads verwaltet und die Ausgabe übernimmt.
Oje, dazu muss ich mir erst mal ein Tutorial heraussuchen, da ich mit Containerklassen und Threads nicht so bewandert bin.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#27

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 17:22
Ich benötige noch einmal Hilfe bzgl. dieser Thread-Beispielanwendung. Wenn ich anstatt der 3 Threads das ganze auf 10 Threads jeweils mit 10 Memofeldern ausweite, scheint das Fenster nicht mehr auf Aktionen zu reagieren. Dies betrifft etwa das Verschieben des Fensters oder das Drücken des Abbrechen-Schalters. Auch ein Verwenden von Application.ProcessMessages ändert daran nichts.

Anbei noch einmal die Beispielanwendung mit 10 Threads anstatt mit 3 Threads. Was kann man da machen ?

Dass die Belastungsgrenze des Prozessors erreicht ist, kann ich mir nicht vorstellen. Der Prozess errteicht ja nichtmal 50 Prozent CPU-Auslastung. Die Threads verrichten ausserdem noch keine eigentliche Arbeit, sondern schreiben nur Zufallszahlen ins Memo. Bin über jede Hilfe dankbar.
Angehängte Dateien
Dateityp: zip threaddemo_159.zip (242,8 KB, 3x aufgerufen)
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 17:46
Du mußt bedenken, daß die Thread die Ganze Zeit über eigentlich nichts anderes machen, als den Hauptthread zu sperren und den Memos was übergeben (was die meußte Zeut eines Threads passiert, da er sonst nix macht) ... tja und der Hauptthread hat dann kaum noch Zeit sich um die VCL zu kümmer, also daß die Form und alles darauf reagiert.

PS: warum die Threads nicht soviel CPU-Last verbrauchen, liegt daran, daß sie sehr viel Zeit nichts tun, da sich oftmals darauf Warten, daß der Hauptthread mal Frei wird, damit sie auch endlich mal darauf zugreifen können.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#29

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 20:39
Hi,

also auf meinem nicht mehr ganz so jungen Laptop läuft das Programm ganz flüssig.
Wenn Du das allerdings im Debugger laufen läßt kannst du die Performance nicht mehr beurteilen, da der Debugger viel zu viel Leistung verbraucht um deine Threads zu kontrollieren.

Allerdings ist mir aufgefallen, dass du zuviel (nämlich die ganze) Arbeit innerhalb von Synchronize verrichtest.
Delphi-Quellcode:
Procedure TBeispielThread4.DoThread;
begin
  randomize;
  FMemo.lines.add('Test Thread 4 - '+IntToStr(Random(200)));
end;
Es sollte eigentlich die Berechnung...
Delphi-Quellcode:
  ...
  Randomize; // auch schon hier nicht so toll, nur einmal pro Programminstanz
  zufallszahl := Random(200); // zufallszahl = membervariable des threads, ebenso logstring
  logstring := 'Test Thread 4 - ' + IntToStr(Zufallszahl);
  Synchronize (Ausgabe);
  ....
von der Ausgabe mit Synchronize getrennt werden.

Delphi-Quellcode:
procedure TThread4.Ausgabe;
begin
  FMemo.Lines.Add(logstring);
end;
Es kommt grundsätzlich darauf an, die Zeit innerhalb einer Synchronize ten Methode so kurz wie möglich zu halten, und die zeitaufwändigen Teile innerhalb der Thread.Execute zu halten.

Gruss

[edit]falsche Quelltextformatierung[/edit]
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#30

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 19. Feb 2009, 11:59
@thkerkmann: Ich habe Deine Tips beherzigt und die eigentlichen Berechnungen in Execute untergebracht. Der Umstand, dass ich bei sehr aktiver Verwendung der Memos ein nicht mehr reagierendes Fenster habe, bleibt allerdings bestehen.

Hier habe ich etwas experimentiert und mal eine Sleep-Funktion eingefügt (etwa 500 Ticks vor jedem Schreibvorgang) und siehe da, dem Hauptthread bleibt wieder mehr Zeit für Reaktionen. In diesem Maße wie hier in der Beispielanwendung auf die Memos zugegriffen wird, ist das in der produktiven Anwendung natürlich nicht der Fall.

Man könnte neben den eigentlichen Thread-Prioritäten auch die Fenster-Priorität erhöhen, ich glaube hierfür gibt es TForm1.SetPriority mit den 4 Prioritätsklassen Idle_Priority_Class, Normal_Priority_Class, High_Priority_Class und Realtime_Priority_Class.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 16:06 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