![]() |
AW: Nach Timer.Enable killt sich das Programm
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.
Delphi-Quellcode:
raise Exception.Create('Test');
|
AW: Nach Timer.Enable killt sich das Programm
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:
|
AW: Nach Timer.Enable killt sich das Programm
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). |
AW: Nach Timer.Enable killt sich das Programm
Zitat:
Suf duesem Computer läuft nichts. Kein Backup, kein Virenscanner. |
AW: Nach Timer.Enable killt sich das Programm
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. |
AW: Nach Timer.Enable killt sich das Programm
Zitat:
Das wird diese Woche nicht mehr gehen, aber ab Montag kann ich das probieren. Danke! |
AW: Nach Timer.Enable killt sich das Programm
[QUOTE=Rupert;1494313]
Zitat:
Zitat:
"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. |
AW: Nach Timer.Enable killt sich das Programm
|
AW: Nach Timer.Enable killt sich das Programm
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: ![]() Der PC oder das Smartfone zeigt dann im einfachsten Fall nur die Webseite des Controllers an, über die man das Programm steuert. |
AW: Nach Timer.Enable killt sich das Programm
Zitat:
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. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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