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

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 2 von 2     12
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.910 Beiträge
 
Delphi 12 Athens
 
#1

AW: Nach Timer.Enable killt sich das Programm

  Alt 7. Sep 2021, 07:28
Du kannst dir in FastMM auch live anzeigen was so im Speicher passiert. Dazu findest du im FastMM4 Ordner auch eine Demo, deren Formular du einfach einbinden kannst. Die liegt unter: FastMM\Demos\Usage Tracker

Das hilft in solchen Fällen oft mehr als nur die Leckanzeige beim Beenden des Prozesses.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Rupert

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 7. Sep 2021, 07:43
Heute um 5:56 passierte zum Zeitpunkt TimerEx1.Enable:=true folgendes:

Zitat:
Ereignistyp: Fehler
Ereignisquelle: Application Error
Ereigniskategorie: Keine
Ereigniskennung: 1000
Datum: 07.09.2021
Zeit: 05:55:31
Benutzer: Nicht zutreffend
Computer: HEIZ-PC
Beschreibung:
Fehlgeschlagene Anwendung heizung2020.exe, Version 11.0.1.1, fehlgeschlagenes Modul kernel32.dll, Version 5.1.2600.5512, Fehleradresse 0x00012aeb.

Daten:
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 68 65 69 ure hei
0018: 7a 75 6e 67 32 30 32 30 zung2020
0020: 2e 65 78 65 20 31 31 2e .exe 11.
0028: 30 2e 31 2e 31 20 69 6e 0.1.1 in
0030: 20 6b 65 72 6e 65 6c 33 kernel3
0038: 32 2e 64 6c 6c 20 35 2e 2.dll 5.
0040: 31 2e 32 36 30 30 2e 35 1.2600.5
0048: 35 31 32 20 61 74 20 6f 512 at o
0050: 66 66 73 65 74 20 30 30 ffset 00
0058: 30 31 32 61 65 62 0d 0a 012aeb..
und
Zitat:
Ereignistyp: Warnung
Ereignisquelle: W32Time
Ereigniskategorie: Keine
Ereigniskennung: 36
Datum: 07.09.2021
Zeit: 05:36:06
Benutzer: Nicht zutreffend
Computer: HEIZ-PC
Beschreibung:
Der Zeitdienst konnte die Systemzeit seit 49152 Sekunden nicht synchronisieren,
da kein Zeitanbieter einen gültigen Zeitstempel anbieten konnte. Die Systemuhr ist nicht synchronisiert.
Der Sync beeindruckt mich nicht wirklich, aber der Fehler im kernel32.dll.
Es ist aber absolut sicher, dass durch das Starten des Timers der Fehler ausgelöst wird (siehe Bild).
Die Fragen sind:
- Gibt es eine andere Möglichkeit - ohne Timer - dei Hauptschleife zyklisch durchlaufen zu lassen
- Wie findet man einen kernel32-Fehler, der praktisch alles sein kann

Das habe ich in einem US-Forum gefunden und werde es probieren:
Zitat:
the problem is something that *particular* program is doing, not something all Delphi programs do.
There's simply no way to even make a wild guess at the problem without debugging it.

My best guesses are either DLL hell or permissions/privileges.
https://www.delphipraxis.net/attachm...1&d=1630997000
Angehängte Grafiken
Dateityp: png Aufzeichnung1.png (44,4 KB, 37x aufgerufen)

Geändert von Rupert ( 7. Sep 2021 um 07:56 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Nach Timer.Enable killt sich das Programm

  Alt 7. Sep 2021, 08:00
.. hast Du madExcept zur Verfügung?
Mit den madExcept Daten ist oftmals einfacher den Grund einer Exception zu ergründen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: Nach Timer.Enable killt sich das Programm

  Alt 7. Sep 2021, 13:30
Zitat:
Ich habe schon andere Timerkomponenten ausprobiert
Dann mach es doch ganz ohne..

SetTimer, KillTimer


Zitat:
Gibt es eine andere Möglichkeit - ohne Timer - dei Hauptschleife zyklisch durchlaufen zu lassen
repeat.. until in Kombination mit

Thread, CreateWaitableTimer, WaitForSingleObject, PostThreadMessage usw..

Geändert von venice2 ( 7. Sep 2021 um 13:56 Uhr)
  Mit Zitat antworten Zitat
Rupert

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 7. Sep 2021, 16:48
.. hast Du madExcept zur Verfügung?
Mit den madExcept Daten ist oftmals einfacher den Grund einer Exception zu ergründen.

Grüße
Klaus
Habe MadCollection implementiert - danke für den Tipp
Die Schleife dauert halt nun 30 sec., aber wenn's hilft

Geändert von Rupert ( 7. Sep 2021 um 17:58 Uhr)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 16:27
[QUOTE=Rupert;1494313]
Suf duesem Computer läuft nichts. Kein Backup, kein Virenscanner.
Du hast also bewusst den Windows Defender, VSS und weitere Systemdienste deaktiviert? Ist zwar noch ein XP, trotzdem schon ein Multitasking-Betriebssystem.

Timer werden in fast jeder Anwendung verwendet.
Timer verwende ich auch gelegentlich, aber nicht nicht in diesem Kontext. Für wiederkehrendes Daten-I/O wie hier verwendet man eher Threads als Timer. Kaum etwas ist nerviger als nicht reagierende UIs, weil der Entwickler Last im Hauptthread erzeugt.

"Timen" kann man dann immer noch mit WaitForSingleObject mit definiertem Timeout auf ein Terminate-Event, um die Schleife im Falle des Programmschließens sofort zu beenden.

Ansonsten, um einen Mehrfachaufruf der Timer-Methode wirklich zu verhindern: mit TCriticalSection wrappen, dann kann er nicht nochmal rein, bevor er raus ist.

Ansonsten hilft es manchmal auch schon, die Logik nicht in der Timer-Methode zu haben, sondern von dort per PostMessage an eine andere Methode die eigentliche Ausführung zu triggern.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 16:41
Hatte ich ebenfalls drauf hingewiesen
Ob er das in Betracht zieht mag mal dahin gestellt sein.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#8

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Sep 2021, 10:15
TCriticalsection hält nur andere Threads davon ab den selben Codeblock aufzurufen.
Innerhalb eines Threads ist der Mehrfachaufruf möglich, deshalb ist das hier keine Option.
Dafür reicht eine Variable, wie oben von mir vorgeschlagen.

Normalerweise würde man eine Steuerung die Tag und Nacht läuft auch nicht auf dem PC implementieren.
Dafür ist zum Beispiel Arduino besser geignet: https://de.wikipedia.org/wiki/Arduino_(Plattform)
Der PC oder das Smartfone zeigt dann im einfachsten Fall nur die Webseite des Controllers an, über die man das Programm steuert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz