Forum: Programmieren allgemein
Delphi
by Uwe Raabe,
21. Sep 2016
Es gibt keine! Ein solcher Lock wäre entweder unnötig oder würde den Thread zum Stillstand bringen. Überleg doch mal - wie sollte das gehen?
Forum: Programmieren allgemein
Delphi
by Uwe Raabe,
21. Sep 2016
Ebensowenig wie die Verwendung von Application.ProcessMessages...
Forum: Programmieren allgemein
Delphi
by Uwe Raabe,
21. Sep 2016
Application.ProcessMessages arbeitet alle anstehenden Windows-Messages ab. Somit natürlich auch die Button-Clicks und die Timer-Events. Das fürhrt dazu, daß der Timer-Event nochmal aufgerufen wird, obwohl der erste wegen der Endlosschleife noch gar nicht beendet wurde.
Ich vermute mal, du hast mindestens zweimal auf den Button geklickt?
Forum: Programmieren allgemein
Delphi
by Uwe Raabe,
21. Sep 2016
Wie schon erwähnt, ist es einem einzelnen Thread durchaus erlaubt, eine CriticalSection mehrfach zu betreten, was zu dem von dir geschilderten Effekt führen kann. Ein mögliches Szenario hatte ich bereits beschrieben. Ohne den vollständigen Originalcode, bei dem der Fehler auftritt, kann man aber nichts mehr dazu sagen.
BTW, warum ist logfile keine lokale Variable?
Forum: Programmieren allgemein
Delphi
by Uwe Raabe,
21. Sep 2016
Das ist formell nicht ganz richtig. Eine CriticalSection kann immer nur von einem Thread durchlaufen werden, von diesem allerdings auch mehrmals - andernfalls könnte der Thread sich selbst dead-locken. Ein innerhalb der gezeigten CriticalSection rekursiv aufgerufenes WriteLnLog würde also problemlos funktionieren und genau das gezeigte Phänomen erzeugen.
Der gezeigte Code fällt allerdings...