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 2 von 4     12 34      
DevidEspenschied

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

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

  Alt 18. Feb 2009, 12:11
Zitat von himitsu:
ja und dann wird es hier auch immer wieder gesagt: prüfe nicht auf True und False
while not Terminated do
Mit dieser Änderung ist der Fehler aber nachwievor drin und reproduzierbar.
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
 
#12

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

  Alt 18. Feb 2009, 12:13
Zitat von devidespe:
Mit dieser Änderung ist der Fehler aber nachwievor drin und reproduzierbar.
hab ja nicht gesagt, das es DER Fehler war

PS: hatte oben etwas nachgetragen
und ich hab hier grad 'nen D2009 auf.
$2B or not $2B
  Mit Zitat antworten Zitat
DevidEspenschied

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

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

  Alt 18. Feb 2009, 12:19
Okay, das ist schon mal etwas brauchbares. Wie kann ich abfragen, ob ein Thread nach Terminate geschlossen ist ? Die Suspend-Eigenschaft kann ich nicht nehmen, da die nur für die vorübergehende Pause von Threads zuständig ist. Es gibt wohl noch Terminated, darauf kann ich aber von der VCL nicht zugreifen.

Als zusätzliche Maßnahme wollte ich wie vorgeschlagen in DoThread prüfen, ob das das Fenster noch existiert. Kannst Du dafür evtl. auch einen Tipp geben ?

Danke schon mal im voraus.
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
 
#14

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

  Alt 18. Feb 2009, 12:34
.Terminated sagt nur, daß der Thread beendet werden soll, aber nicht ob er schon beendet wurde.

Entweder du setzt eine Ereignisprozedur für .OnTerminate und setzt dort etwas in deinem Programm

wenn du in ReturnValue setzt ( <> 0), dann könnte man über ThreadID bestimmt den Wert abfragen.

oder ganz einfach, du machst in deinen TThread-Abkömmling einen neuen Wert (z.B. Boolean), welcher beim Start False ist und setzt den am Ende deiner .Execute diesen via Synchronize auf True und fragst diesen dann in der Schleife ab.
$2B or not $2B
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#15

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

  Alt 18. Feb 2009, 12:35
Wie wäre es damit:
Delphi-Quellcode:
  Th1.Terminate;
  Th2.Terminate;
  Th3.Terminate;
  Th1.WaitFor;
  Th2.WaitFor;
  Th3.WaitFor;
  Close;
Zuvor muss aber noch das "while (True)" aus allen Threads raus.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 18. Feb 2009, 12:45
ahh, WaitFor garb's ja och noch ... hatte da nur erst die Angst, daß dieses die Nachrichtenschleife nicht weiter abrbeiten würde und so 'ne Endlosschleife entstünde

aber es geht
$2B or not $2B
  Mit Zitat antworten Zitat
DevidEspenschied

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

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

  Alt 18. Feb 2009, 12:45
Zitat von himitsu:
oder ganz einfach, du machst in deinen TThread-Abkömmling einen neuen Wert (z.B. Boolean), welcher beim Start False ist und setzt den am Ende deiner .Execute diesen via Synchronize auf True und fragst diesen dann in der Schleife ab.
Also etwa so:

Delphi-Quellcode:
TBeispielThread1 = class (TThread)
  private
    FMemo: TMemo;
  protected
    procedure Execute; override;
    procedure StarteThread;
    procedure DoThread;
  public
    Beendet : Boolean;
    constructor Create(Memo: TMemo; ThreadPriority: TThreadPriority);
  end;

constructor TBeispielThread1.Create(Memo: TMemo; ThreadPriority: TThreadPriority);
begin
  inherited Create(False);
  Priority:=ThreadPriority;
  FMemo:=Memo;
  Beendet:=False;
end;

procedure TBeispielThread1.Execute;
begin
  while not Terminated do begin sleep(1); StarteThread; end;
  Beendet:=True;
end;
Und dann mit der Schleifenabfrage:

Delphi-Quellcode:
 while (Th1.Beendet=False) or (Th2.Beendet=False) or (Th3.Beendet=False) do
  begin
    Sleep(10);
    Application.ProcessMessages;
  end;
Edit: Habe jetzt WaitFor genommen und es läuft ohne Fehler. Jetzt gibt es noch das Problem, dass ich jeweils in .DoThread prüfen will, ob das das Fenster noch existiert.
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
 
#18

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

  Alt 18. Feb 2009, 12:52
Zitat von devidespe:
Jetzt gibt es noch das Problem, dass ich jeweils in .DoThread prüfen will, ob das das Fenster noch existiert.
wenn du das Fenster nicht schließt, bevor die Threads beendet sind, ist das eigentlich nicht mehr nötig.
$2B or not $2B
  Mit Zitat antworten Zitat
quendolineDD

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

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

  Alt 18. Feb 2009, 12:56
Ich habe in meinen Execute-Methoden meiner Threads oft in der Schleife eine Variable, die ich von außen setzen kann.
while CanRun do Und im Hauptprogramm
Delphi-Quellcode:
Thread.CanRun := False;
Thread.Terminate;
Thread.WaitFor;
Und gewöhn dir mal ab, auf False und True abzufragen sondern nutze logische Operatoren wie NOT, AND, OR usw.

Also bei dir
while (not Th1.Beendet) and (not Th2.Beendet) and (not Th3.Beendet) do Vielleicht solltest du dir auch überlegen anstatt auf Beendet abzufragen ob er noch laufen darf, dann musst du nicht immer alles negiert denken. Das macht es auch einfacher ...

Und du solltest auch strikt VCL und Threads voneinander trennen. Die Threads machen keinen Sinn wenn du andauernd über Synchronize auf den Mainthread zugreifst.
Einfach wie himitsu sagt, dafür sorgen das die Threads beendet werden, bevor das Fenster beendet wird.
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
 
#20

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

  Alt 18. Feb 2009, 13:05
@quendolineDD: für den CanRun gibt es die .Terminated Variable im Thread.
Setzt man diese (z.B. durch den Aufruf von .Terminate) auf True, muß sich der Thread selbst beenden.


Zitat:
Die Threads machen keinen Sinn wenn du andauernd über Synchronize auf den Mainthread zugreifst.
och, das seh ich jetzt nur mal als "einfachen" Testcode an, mit welchem er seine Threads testen möchte
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 09:02 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