AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Nach Timer.Enable killt sich das Programm
Thema durchsuchen
Ansicht
Themen-Optionen

Nach Timer.Enable killt sich das Programm

Ein Thema von Rupert · begonnen am 5. Sep 2021 · letzter Beitrag vom 11. Okt 2021
Antwort Antwort
Seite 5 von 5   « Erste     345   
Rupert

Registriert seit: 10. Nov 2013
23 Beiträge
 
#41

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Okt 2021, 09:48
Mit dem Debugger kann ich den Punkt auffinden, es ist nach wie vor Timer.enabled...
https://www.delphipraxis.net/attachm...1&d=1633765765
https://www.delphipraxis.net/attachm...1&d=1633766035
Miniaturansicht angehängter Grafiken
exception.png   cpu-bild.png  

Geändert von Rupert ( 9. Okt 2021 um 09:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#42

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Okt 2021, 10:36
Sag mal, ist das eventuell kein Standard-Timer? Ich lese da TLMDTimeInterval...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#43

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Okt 2021, 10:48
Sag mal, ist das eventuell kein Standard-Timer? Ich lese da TLMDTimeInterval...
Ich hatte ihn schon auf normale Timer verwiesen er scheint es aber zu ignorieren.
Der Thread hier ist eine reines Ratespiel.
  Mit Zitat antworten Zitat
Rupert

Registriert seit: 10. Nov 2013
23 Beiträge
 
#44

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Okt 2021, 11:23
Sag mal, ist das eventuell kein Standard-Timer? Ich lese da TLMDTimeInterval...
Ich hatte ihn schon auf normale Timer verwiesen er scheint es aber zu ignorieren.
Der Thread hier ist eine reines Ratespiel.
Natürlich habe ich das nicht ignoriert das Programm modifiziert und den System-Timer probiert. Auch mit einem anderen externen Timer (Sulako) hatte ich auch schon experimentiert.
Stets das selbe, bei Timer.enable kracht es.

Aber dank der vielen Inputs bin ich dem Problem schon sehr nahe gekommen und glaube die Ursache bis kommende Woche gefunden zu haben, denn erstmals konnte ich eine Exception auslösen und die Position auffinden.
Danke jedenfalls für die Tipps!
  Mit Zitat antworten Zitat
Rupert

Registriert seit: 10. Nov 2013
23 Beiträge
 
#45

AW: Nach Timer.Enable killt sich das Programm

  Alt 11. Okt 2021, 18:16
Ursache gefunden - Problem gelöst.

Das Programm hat nicht nur den Timer, der die Hauptschleife triggert, sondern es gibt noch zwei weitere.
Ein Timer (Timer-A) dient dazu, dass der Heizkessel seinen Impuls bekommt, sich einzuschalten und der andere Timer (Timer-B) erfüllt den Zweck, dass ein oder mehrere Räume schnell aufgeheizt werden (Ferienwohnung wurde kurzfristig gebucht und muss auf Normaltemperatur gebracht werden).

Timer-A läuft 25 min (Kessel)
Timer-B läuft 4 Stunden (Raumheizung)

Timer-B wird durch den Button extra heizen ausgelöst oder auch gestoppt:
Delphi-Quellcode:
  if extraheizenchecked then begin
    if Timer_Extra_heizen.Enabled then begin
      Timer_Extra_heizen.visible:=true;
      Timer_Extra_heizen.StartCountdown;
    end;
  end else
    Timer_Extra_heizen.EndCountdown;
Ereignis OnCountdownEnd sieht so aus:
Delphi-Quellcode:
procedure THauptformular.Timer_Extra_heizenCountdownEnd(Sender: TObject);

var i:SmallInt;

begin
    extraheizenchecked:=false;

    for i:=1 to 23 do // alle Räume
      if Extra_heizen[i] then begin
        Extra_heizen[i]:=false; // Status löschen
        Heizstatus[i]:= normal_erreicht; //egal bei welcher tats. Temperatur
    end;
    Timer_Extra_heizen.Enabled:=false;
    Timer_Extra_heizen.visible:=false;
end;
Dieser Timer verursachte das Problem nicht. Aber Timer-A, der so ähnlich aussieht.

Timer-A:
Der Pellets Heizkessel muss mindestens 25 min laufen, damit der Kamin nicht versottet.

Ereignis OnCountdownEnd sah so aus:

Delphi-Quellcode:
procedure THauptformular.Kessel_Ende_Countdown(Owner:TObject);

Begin
  Kessel_manuell_ein:=false;
  Kesseluhr.Endcountdown();
  Kesseluhr.Visible:=false;
  // kessel wird erst abgeschaltet, wenn die Vorlauf-Temperaturbedingungen erfüllt sind
  Abfrage_Kessel_Ausschalten(nil);
end;
Jeder Timer bedient sich des Windows API Timers und deshalb sah es so aus, als würde der Hauptschleifentimer den Crash verursachen. Tatsächlich verursachte jedoch Timer-A den Stack-Overflow. Nachdem ich mich nicht auf diesen Timer konzentriert habe, fand ic auch die Ursache für den Stack-Overlow nicht sofort.
Erst, als ich einen Demomode eingebaut hatte, um das Programm außerhalb des Heizcomputers zu betreiben erhielt ich die Position, wo sich das Programm gekillt hat - bei der Procedure Kessel_Ende_Countdown
Delphi-Quellcode:
Begin
  Kessel_manuell_ein:=false;
  Kesseluhr.Endcountdown(); // hier wurde Kessel_Ende_Countdown rekursiv aufgerufen
  Kesseluhr.Visible:=false;
  // kessel wird erst abgeschaltet, wenn die Vorlauf-Temperaturbedingungen erfüllt sind
  Abfrage_Kessel_Ausschalten(nil);
end;
Warum der Stack-Overflow nicht bei jedem Kessel_Ende_Countdown ausgelöst wurde weiß ich nicht, ist mir aber nun egal. Die Zeile muss irgendwann versehentlich durch copy/paste hineingerutscht sein, da ich in der Doku keinen Hinweis auf Änderung der Procedure fand.

Vielen, vielen Dank an euch alle.
Ihr habt mich großartig unterstützt, denn durch eure Hinweise kam ich dem Verursacher immer näher und fand schließlich die kurze, aber todbringende Zeile, was bei 8032 Programmzeilen gar nicht mehr so einfach ist!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 08:36 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