AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fragen zum TThread, Programm absturzsicher?
Thema durchsuchen
Ansicht
Themen-Optionen

Fragen zum TThread, Programm absturzsicher?

Ein Thema von BAMatze · begonnen am 6. Feb 2009 · letzter Beitrag vom 8. Feb 2009
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Fragen zum TThread, Programm absturzsicher?

  Alt 6. Feb 2009, 16:18
Ok, ich habe es mal getestet (in D7)
  • Direkt über die WinAPI bleibt das komplette Programm stehen (tut nix mehr aber schließt sich auch nicht), wenn in einem Thread eine Exception auftritt:
    Delphi-Quellcode:
    function ThreadFunc(lparam:Integer):Integer; stdcall;
    begin
      raiseException(0,0,0,nil);
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var temp:Cardinal;
    begin
      createthread(nil,0,@ThreadFunc,nil,0,temp);
    end;
  • Bei BeginThread legt Delphi noch ein Exceptionframe auf die Funktion _ExceptionHandler der eine schöne Meldung ausgibt und dann das Programm beendet
  • TThread hat (was mir in Erinnerung war und wie himitsu sagt) ein try..except um die Methode Execute. Die Exception wird dann in der Eigenschaft FatalException gespeichert und kann abgerufen werden. Egal was gemacht wird, der Thread beendet sich und alles andere läuft normal weiter. Kein Meldungsfenster, kein nix.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#22

Re: Fragen zum TThread, Programm absturzsicher?

  Alt 8. Feb 2009, 20:37
@ sirius,

also erstmal danke für deine Mühen, aber kannst du da nochmal etwas genauer drauf eingehen? Ich hab das nicht wirklich verstanden, wie ich das Hauptthread absturzsicher mache. Könntest das eventuell nochmal etwas genauer erklären? also bei meinem Rad Studio 2006 ist bisher immer beide Threads durchgebrannt bei einer Exception. Hab noch keinen Weg gefunden, wie ich das verhindern kann. Dies scheint dir ja gelungen zu sein.

Auch Danke an euch andere.
BAMatze
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Fragen zum TThread, Programm absturzsicher?

  Alt 8. Feb 2009, 21:18
nunja, am einfachsten scheint es zu sein, wenn du alle Hauptprozeduren deiner Thread und des Hauptthreads in Try Except verpackst.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: Fragen zum TThread, Programm absturzsicher?

  Alt 8. Feb 2009, 21:26
Zitat von himitsu:
nunja, am einfachsten scheint es zu sein, wenn du alle Hauptprozeduren deiner Thread und des Hauptthreads in Try Except verpackst.
Ja dies scheint auch seine Vorteile zu haben, da man dann in den Except-Teil gleich eine Fehlermeldung übergeben kann, aber würde gern mal wissen, wie Sirius das gemacht hat. Hat auch einen Hintergrund, ein großes Programm meines Vorgängers, hat trotz try und Except regelmäßige Abstürze und sämtliche Daten gehen verloren (habe ich im Einleitungsteil dieses Threats schonmal beschrieben). Möchte dies bei meinem Programm vermeiden. Deswegen möchte ich das mal nachvollziehen, was sirius da gemacht hat, damit ich mir die beste Variante oder eine Kombination machen kann.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Fragen zum TThread, Programm absturzsicher?

  Alt 8. Feb 2009, 22:00
siehe Beitrag #20, da bemerkt man, daß Delphi bei TThread die Thread-Prozedur (.Execute) schon mit einem Try-Except-Block absichert (zumindestens in "neueren" Delphiversionen)

k.A. ob's funktioniert
Delphi-Quellcode:
Program MyProgram;

Uses SysUtils, Forms, Unit1;

Var doRestart: Boolean;

Begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Repeat
    doRestart := False;
    Try
      Application.Run;
    Except
      doRestart := True;
    End;
  Until doRestart and not Application.Terminated;
End.
hier hab ich mal alles verpackt und versucht die Finalisierung von Application nachzubauen:
Delphi-Quellcode:
Uses SysUtils, Classes, Forms, Unit1;

Function FindGlobalComponent(Const Name: String): TComponent;
  Var i: Integer;

  Begin
    For i := 0 to Screen.FormCount - 1 do Begin
      Result := Screen.Forms[i];
      If not (csInline in Result.ComponentState) and
          (CompareText(Name, Result.Name) = 0) Then Exit;
    End;
    For i := 0 to Screen.DataModuleCount - 1 do Begin
      Result := Screen.DataModules[i];
      If CompareText(Name, Result.Name) = 0 Then Exit;
    End;
    Result := nil;
  End;

Var doRestart: Boolean;

Begin
  Repeat
    doRestart := False;
    Try
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    Except
      doRestart := True;
      Try
        If (Application <> nil) and (Application.Handle <> 0) Then Begin
          Application.Minimize;
          Application.ShowHint := False;
          Application.Destroying;
          Application.DestroyComponents;
        End;
        // If HintDoneEvent <> 0 Then CloseHandle(HintDoneEvent);
        UnregisterFindGlobalComponentProc(FindGlobalComponent);
      Except
      End;
    End;
  Until doRestart and not Application.Terminated;
End.
aber eigentlich die die Nachrichtenbearbeitung des Hauptthreads (im .Run) auch per Try-Except abgesichert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 22:21 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