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
Antwort Antwort
Seite 1 von 2  1 2      
a.def
(Gast)

n/a Beiträge
 
#1

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

  Alt 24. Nov 2016, 14: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 18:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:38
Grundsätzlich sollte das kein Problem machen.

Tust Du im Timer-Event evtl. noch mehr, was Du hier bisher verschwiegen hast?
Oder gibt der Debugger vielleicht irgend welche näheren Hinweise auf die Problemursache?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
533 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:39
Wenn ich in der Windows-Meldung (APPCRASH) "Das Programm funktioniert nicht mehr" auf OK klicke, wird auch #2 ins Log geschrieben.
Und was steht dann in der Windows Ereignisanzeige?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:41
Ich stoppe den Timer, gebe drei Bool'sche Variablen einen Wert, schreibe den Test-Log und rufe Close; auf.

Und dann schmiert es ab und zu ab.
In diesem Fall kann ich den Debugger leider nicht verwenden, da das Programm über ein CMD-Fenster mit Parametern aufgerufen wird.

Zitat:
Und was steht dann in der Windows Ereignisanzeige?
Suche ich gleich mal raus wenn der Fehler erneut auftritt.

In der Problemsignatur steht nur Unsinn und
Zitat:
Ausnahmecode: c0000005
Jetzt kam der Fehler zum Glück direkt beim ersten Mal.
Timer1 wird aus einer Prozedur eingeschaltet, welche ebenfalls vorher über einen Timer aufgerufen wurde.
Ab und zu kommt der Fehler auch am Ende des Haupttimers und Timer1.

Geändert von a.def (24. Nov 2016 um 14:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 14:57
In diesem Fall kann ich den Debugger leider nicht verwenden, da das Programm über ein CMD-Fenster mit Parametern aufgerufen wird.
Dann gib doch diese Parameter in Delphi über "Start - Parameter" im Feld "Parameter" ein, dann geht auch das Debuggen (oder gibt es das in der Starter nicht?).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:07
(oder gibt es das in der Starter nicht?).
Ups da habe ich mich verklickt. Ich habe damals die Professional gekauft als sie runtergesetzt war (auch wenn ich kein Professional bin )

Funktioniert einwandfrei. Nur was mache ich dann danach, wenn eine Exception geworden wurde?
Weil Chinesisch lesen ist schwierig.

Geändert von a.def (24. Nov 2016 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:07
In diesem Fall kann ich den Debugger leider nicht verwenden, da das Programm über ein CMD-Fenster mit Parametern aufgerufen wird.
Dann gib doch diese Parameter in Delphi über "Start - Parameter" im Feld "Parameter" ein, dann geht auch das Debuggen (oder gibt es das in der Starter nicht?).
Die Lösung wollte ich auch gerade vorschlagen. Alternativ kann er ja einfach so machen als ob die Parameter übergeben wurden.
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#8

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:13
Probier doch mal, hinter schreibeLog(1,...) ein Application.ProcessMessages einzufügen.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#9

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:14
Werde ich sofort machen und dann gucken was passiert.
Das kann leider von Mal zu Mal etwas dauern bis ich ein Ergebnis habe, da der Fehler recht selten auftaucht.

Ein Application.ProcessMessages; im Timer bringt leider keine Änderung.

Im Debugger steht aktuell immer
Zitat:
00449E2B 3B7308 cmp esi,[ebx+$08]
Manchmal steht der grüne Pfeil auch an "Leave".

Ich habe das Application.ProcessMessages; jetzt mal in den Timer direkt nach begin gesetzt. Mal sehen, ob es etwas ändert.
Ok tut es nicht.

Geändert von a.def (24. Nov 2016 um 15:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Close; im TTimer lässt Programm manchmal abschmieren

  Alt 24. Nov 2016, 15:54
Im Debugger starten und schauen wo man landet, wenn die exception geworfen wird.
* siehe Cursorposition/Markierung im Quellcode
* siehe Stacktrace

Und vielleicht vorher einen Haltepunkt auf Close und dann mit F7/F8 weitergucken.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:44 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