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 3 von 5     123 45      
Blup

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 08:55
Ist madExcept auch richtig installiert und in die Anwendung eingebunden?
Erzeuge zum Test mal eine Exception in deiner Methode und schau ob und wie diese gemeldet wird.

raise Exception.Create('Test');
  Mit Zitat antworten Zitat
Rupert

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 09:19
Natürlich wurde MadExcept richtig installiert und auch zuvor getestet
Aufgrund der unterschiedlichen Meinungen zu diesem Problem bin ich mir aber ziemlich sicher, dass es kein Programmfehler ist.

Zitat:
date/time : 2021-09-07, 17:43:07, 294ms
computer name : HEIZ-PC
user name : Erhitzer <admin>
registered owner : Erhitzer
operating system : Windows XP Service Pack 3 build 2600
system language : German
system up time : 32 minutes 17 seconds
program up time : 3 seconds
physical memory : 499/767 MB (free/total)
free disk space : (C 26,74 GB
display mode : 1280x1024, 32 bit
process id : $24c
allocated memory : 31,95 MB
largest free block : 1,28 GB
executable : Heizung2020.exe
exec. date/time : 2021-09-07 17:38
version : 11.0.1.1
compiled with : Delphi 5
madExcept version : 4.0.21
contact name : Rupert
contact email : rupert@cor.at
callstack crc : $9f487409, $90a79116, $90a79116
exception number : 1
exception class : EABSException
exception message : Cannot open file:'C:\Programme\Heizungsregelung\Datenbank\Heiz daten.abs' Error code: 32. ErrorMessage: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird - Native error: 30364.
  Mit Zitat antworten Zitat
CCRDude

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 09:54
Die Meldung sagt ja aber schon, dass es ein eindeutig Programmfehler ist

Da wird der mögliche Fehlerfall, dass die Datei anderweitig geöffnet ist, nicht behandelt.

Wenn es immer die gleiche Zeit ist: findet zu dieser Zeit evtl. ein Backup statt? Es gibt ja durchaus berechtigte Interessen dritter Programme bzw. des Betriebssystems - sei es ein Backup, ein gründlicher AV-Scan, ... .

Da muss man dann schauen, ob man die Datei dauerhaft offen hält (und auf teilweise sinnvollen Fremdzugriff wie eben ein Backup verzichtet), oder ob man den Fehlerfall behandelt (was man so oder so muss, da die Datei auch schon beim ersten Öffnen anderweitig gesperrt sein kann).
  Mit Zitat antworten Zitat
Rupert

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 11:28
Die Meldung sagt ja aber schon, dass es ein eindeutig Programmfehler ist

Da wird der mögliche Fehlerfall, dass die Datei anderweitig geöffnet ist, nicht behandelt.

Wenn es immer die gleiche Zeit ist: findet zu dieser Zeit evtl. ein Backup statt? Es gibt ja durchaus berechtigte Interessen dritter Programme bzw. des Betriebssystems - sei es ein Backup, ein gründlicher AV-Scan, ... .

Da muss man dann schauen, ob man die Datei dauerhaft offen hält (und auf teilweise sinnvollen Fremdzugriff wie eben ein Backup verzichtet), oder ob man den Fehlerfall behandelt (was man so oder so muss, da die Datei auch schon beim ersten Öffnen anderweitig gesperrt sein kann).
Dieser Dateifehler wurde von mir provoziert, um MadExcept zu testen.
Suf duesem Computer läuft nichts. Kein Backup, kein Virenscanner.
  Mit Zitat antworten Zitat
Blup

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 11:36
Timer werden in fast jeder Anwendung verwendet.
Kommentiere doch mal alles was mit deiner Steuerung zu tun hat aus.
Dann lass das Programm laufen und schau ob der Fehler noch auftritt.
  Mit Zitat antworten Zitat
Rupert

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 15:36
Kommentiere doch mal alles was mit deiner Steuerung zu tun hat aus.
Du meinst das Lesen von und die Ausgabe auf die Steuerkarte.
Das wird diese Woche nicht mehr gehen, aber ab Montag kann ich das probieren.
Danke!
  Mit Zitat antworten Zitat
CCRDude

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 17: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
 
#28

AW: Nach Timer.Enable killt sich das Programm

  Alt 8. Sep 2021, 17: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.464 Beiträge
 
Delphi 12 Athens
 
#29

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Sep 2021, 11: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
CCRDude

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

AW: Nach Timer.Enable killt sich das Programm

  Alt 9. Sep 2021, 22:25
Innerhalb eines Threads ist der Mehrfachaufruf möglich, deshalb ist das hier keine Option.
Dafür reicht eine Variable, wie oben von mir vorgeschlagen.
Du hast recht!

In diesem Kontext eine Zwischenfrage: verwendet das Programm zufälligerweise Application.ProcessMessages? Das wird ja gerne mal reingehauen, wenn man den UI-Thread viel arbeiten lässt, und hat bei mir schnell dahingerotzten Timerdingern auch schonmal was kaputtgemacht, bevor ich gelernt habe, die Finger davon zu lassen. Deswegen ja auch der Tipp, die eigentliche Funktionalität per PostMessage in ner anderen Methode zu triggern, um aus dem Kontext dieser vom Timer aufgerufenen Methode rauszukommen.

Normalerweise würde man eine Steuerung die Tag und Nacht läuft auch nicht auf dem PC implementieren.
Aber schau mal am Anfang, wie alt das ganze ist. 1997 gab es noch keinen Arduino. Ein Hutschienen-PC mit Goldcap statt Batterie und EEPROM war's da eher... wobei das dann TP statt Delphi noch gewesen wäre.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 13: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