Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mandelbug auf die Schliche kommen (https://www.delphipraxis.net/175448-mandelbug-auf-die-schliche-kommen.html)

Sir Rufo 24. Jun 2013 13:56

AW: Mandelbug auf die Schliche kommen
 
Wenn du das Update per PostMessage anstösst, warum dann eine CS?
Dann läuft das doch auch im MainThread-Kontext und eine CS ist dann überflüssig.

Du solltest abprüfen, ob beim Aufruf der Update-Methode auch
Delphi-Quellcode:
MainThreadID = GetCurrentThreadID
ist (sollte ja so sein).
Die VCL reagiert auch dann komisch, wenn man trotz CS aus einem anderen Thread darauf zugreift ;)

Namenloser 24. Jun 2013 15:11

AW: Mandelbug auf die Schliche kommen
 
Wo gerade schon PostMessage in einem anderen Zusammenhang erwähnt wurde: Bau doch deinen Logger so um, dass er mit Messages arbeitet (Also einen neuen Logger-Thread mit eigener Message-Loop machen, und dann immer mit PostThreadMessage die Log-Einträge an ihn schicken). Dann sollte das Logging IMO auf den Programmablauf keinen Einfluss mehr haben.

Zum Remote-Debugging: Man vergisst es manchmal, weil man damit meistens nur in den Untiefen des WinAPI-Assemblercodes landet, aber es gibt beim Debugger auch noch den Pause-Button ;). Ich hab damit z.B. gestern rausgefunden, dass mein Multi-Thread-Programm sich in WaitForSingleObjectEx aufgehängt hatte. Vielleicht kannst du den Fehler damit doch eingrenzen.

Medium 24. Jun 2013 15:41

AW: Mandelbug auf die Schliche kommen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1219576)
Wenn du das Update per PostMessage anstösst, warum dann eine CS?
Dann läuft das doch auch im MainThread-Kontext und eine CS ist dann überflüssig.

Die Liste, die in der Update-Prozedur abgearbeitet wird, wird in einem anderen Thread mit neuen Items versorgt. Diese wird dort abgesichert, nicht die VCL Controls.

Remote-Debugging hat sich mittlerweile erledigt, da ich das Gerät vorhin wieder beim Kunden hin gehängt habe. Ich durfte das Teil leider nur über das Wochenende haben, die Mittagsschicht heute brauchte es wieder :(
Die Idee das Logging so zu entkoppeln ist aber interessant. Das könnte ich da mal bei Gelegenheit rein bauen! Cool.

nahpets 24. Jun 2013 17:38

AW: Mandelbug auf die Schliche kommen
 
Hallo,

weiß nicht, ob ich hier hilfreich sein kann.

Habe ein Programm, das aber ein ähnliches Verhalten an den Tag legt.

Es dient dazu per TIDHTTP diverse Listen von Dateien von unterschiedlichen Server abzuholen und als Dateien lokal zu speichern bzw. abhängig vom Inhalt der Dateien Einträge in einer Datenbank vorzunehmen.

Es laufen immer mehrere Threads, die jeweils eine eigenen HTTP-Verbindung aufmachen.

Ab und an klappt da was nicht und ein Thread bleibt stehen.

Habe dann ein Logging eingebaut, das mir alle Fehler protokolliert. Das klappt auch soweit. Wenn ein Thread stehen bleibt, muss aber kein Fehler aufgetreten sein. Was mir aber in den Logdateien aufgefallen ist, ist folgendes: Bevor ein Thread stehen bleibt, ist in diesem oder einem anderen Thread, mit einer Verbindung zu dem gleichen Server, ein Fehler aufgetreten (meist Fehler 500 - interner Serverfehler - auf Serverseite). D. h.: Nachdem ein Fehler auftrat, scheint eine neue Verbindung zu dem entsprechenden Server (häufig, aber nicht immer) zu scheitern, aber nicht so, dass ein abfangbarer Fehler auftritt, sondern die Verbindung per TIDHTTP scheint in einen nicht definierten Zustand zu treten. Sie kommt nicht zurück, es ist auch keine Tätigkeit im Netz von dieser Verbindung zu erkennen, die Verbindung bleibt aber (laut Firewall) bestehen, ein Timeout tritt auch nach Stunden nicht auf. Dieser Zustand läßt sich nur durch das Beenden des Programmes beheben.

Eine Lösung habe ich nicht, bei meinem Programm gehe ich momentan her und beende die weitere Verarbeitung, sobald ich eine Fehlermeldung im Logging feststellen kann. Es wird dann eine Meldung ausgegeben. Wird die Verarbeitung dann (ohne Programmneustart) neu gestartet, kann es sein, dass sie über Stunden problemlos weiterläuft (bis irgendwann der nächste "Hänger" auftritt).

Könnte es sein, dass bei dem hier beschriebenen Problem ein ähnlicher "Zustand" eintritt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 2 von 2     12   

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