AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi [Behoben, siehe Beitrag #13] Close; im TTimer lässt Programm manchmal abschmieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Behoben, siehe Beitrag #13] Close; im TTimer lässt Programm manchmal abschmieren

Ein Thema von a.def · begonnen am 24. Nov 2016 · letzter Beitrag vom 24. Nov 2016
 
a.def
(Gast)

n/a Beiträge
 
#1

[Behoben, siehe Beitrag #13] Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 13:29
Nach fast getaner Arbeit startet mein Programm einen TTimer.
Der TTimer prüft, ob die Hauptarbeit denn nun wirklich vorbei ist oder nicht anhand dreier Boolean-Variablen die an verschiedenen Stellen gesetzt werden / resettet werden.

Trifft alles zu, steht im Timer Close;

In manchen Fällen schmiert hier das Programm ab. Ich schreibe zum Test vor dem Close im Close-Event selber an oberster Stelle eine Log-Datei. Etwa so
Delphi-Quellcode:
// Programm wird gestartet
// Wenn Programm gestartet, dann wird eine Prozedur aufgerufen, welche einen Timer (Timer_Arbeit) startet
// Dieser Timer setzt Timer_Arbeit.Enabled:=False und klickt Button1

// Wenn Button1-Arbeit fertig, wird Timer1 gestartet
// Sobald ArbeitImGange=True, darf Timer1 Close; aufrufen.

// Der Fehler kommt oft zwischen dem Ende von Timer_Arbeit und Timer1

procedure TForm1.Button1Click(Sender: TObject);
begin
 ArbeitImGange := True;
 // mache deine Arbeit!

 // wenn fertig dann...
 Timer1.Enabled := True;

 ArbeitImGange := False;
end;

// timer
procedure Timer1Timer(Sender: TObject);
begin
 if not ArbeitImGange dann
  begin
   Timer1.Enabled := False;
   schreibeLog('1. Schließen gestartet');
   Close;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 schreibeLog('2. Schließen geht weiter ...');
 // mach weiter
end;
Wenn das Programm abschmiert, steht Lognachricht #1 im Log, #2 aber nicht.
Wenn ich in der Windows-Meldung (APPCRASH) "Das Programm funktioniert nicht mehr" auf OK klicke, wird auch #2 ins Log geschrieben.

D.h da schmiert zwar irgendetwas ab, sobald ich die Windows-Meldung aber bestätige geht es weiter.

Darf man Close; nicht in einem Timer verwenden?

Geändert von a.def (24. Nov 2016 um 17:40 Uhr)
  Mit Zitat antworten Zitat
 


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