Forum: Win32/Win64 API (native code)
by Blup,
16. Sep 2021
Mit "killt sich das Programm" ist doch ein Absturz gemeint?
Die Beschreibung hört sich aber jetzt eher nach eine Festhängen in einer Endlosschleife an.
Hauptschleifencounter wird bei jedem Aufruf des Timers erhöht, aber scheinbar niemals zurück gesetzt.
Natürlich läuft der irgendwann über und wird negativ.
Dann dauerrt es natürlich ewig bis der wieder positiv und größer 10 wird.
Im Prinzip...
Forum: Win32/Win64 API (native code)
by Blup,
9. Sep 2021
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:...
Forum: Win32/Win64 API (native code)
by Blup,
8. Sep 2021
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.
Forum: Win32/Win64 API (native code)
by Blup,
7. Sep 2021
Wenn ich tief in meine Glaskugel schau, hab ich diese Hypothese:
Direkte Fehlerursache ist ein Überlauf des Aufrufstapels.
Wenn der Timer im OnTimer-Ereignis wieder angeschalten wird, wird an dieser Stelle möglicherweise OnTimer sofort wieder aufgerufen.
So dass Hauptschleife() sich indirekt selbst rekursiv aufruft, immer wieder, bis der Stapel überläuft.
Ein Tool wie madExcept könnte da...
Forum: Win32/Win64 API (native code)
by Blup,
6. Sep 2021
Ich vermute auch das "CleanupInstance" da nicht hingehört, kommentiere das mal aus.
Statt den Timer immer wieder aus und ein zu schalten, ist es vieleicht besser die vergangene Zeit seit dem letzen Aufruf zu testen.
procedure Hauptschleife(Owner: TObject);
private
SteuerungAktiv: Boolean;
NextStart: TDateTime;
procedure DoSteuerung;
end;