Autor Beitrag
jjturbo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Di 26.11.13 09:47 
Moin Forum,

wir haben immer noch ein Problem mit einem Projekt; die Anwendung friert ab und zu ein. Seltsamerweise scheint das nur zu passieren wenn niemand mehr an dem Programm arbeitet.
Man arbeitet von 6:00Uhr bis 15:00Uhr, das Einfrieren passierte mal um 16:15Uhr, gestern zum Beispiel abends um 19:46Uhr.

Zur Anwendung: Auf dem PC läuft ein Firebird Server, die Anwendung läuft auf dem gleichen PC. Im Mainthread der Anwendung wird über Zeos Komponenten auf die Firebird Datenbank zugegriffen. Im Hintergrund laufen in dieser Anwendung zwei weitere Threads, einer steuert den Zugriff auf eine SPS, der andere greift ebenfalls über (privat deklarierte) Zeos Komponenten auf die Firebird Datenbank zu.

Jetzt habe ich mal ein kleines Überwachungsprogrämmchen geschrieben und auf den PC kopiert. Unsere Hauptanwendung schickt per Findwindow und Postmessage Botschaften an dieses kleine Überwachungsprogramm, so dass wir sehen können wann welche Prozedur bzw. Funktion aufgerufen oder beendet wird.

Und wenn die Anwendung eingefroren ist, kann man folgendes sehen:
- Die beiden Threads im Hintergrund laufen noch und bearbeiten alle Anforderungen
- Im Mainthread ist eine zyklisch gestartete Prozedur gestartet worden, alle von dort aus gestarteten Prozeduren wurden durchlaufen, aber scheinbar wird diese Prozedur nicht beendet. Nach dem letzten Eintrag passiert dort aber nichts mehr, außer daß einem Integer noch ein Wert zugeweisen wird und anschliessend die Botschaft losgeschickt wird daß die Prozedur beendet wurde.

Ich hoffe mich verständlich ausgedrückt zu haben und ganz besonders darauf daß jemand weiterhelfen kann.

Gruß Oliver

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.11.13 10:03 
Zur Analyse würde ich .dbg Debuginformationen generieren und dann, wenn das Programm eingefroren ist, mit dem Process Explorer draufschauen. Dort siehst du in welchem Thread sich die einzelnen Threads gerade bewegen.

Vermutlich wirst du dann so etwas wie WaitForSingleObject oder ähnliche blockierende Funktionen finden, hoffentlich mit genügend Informationen im Stacktrace. ;-)
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Di 26.11.13 23:44 
Hallo Jaenicke,

wie erzeugt man die .dbg-Datei? Unter den Compiler-Direktiven (allerdings "nur" Delphi 7 Personal) habe ich nichts gefunden.

Gruß GuaAck
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Mi 27.11.13 00:07 
Hallo jjturbo,

du schreibst, es wird eine Botschaft abgeschickt, dass die Prozedur beendet sei. Wie machtst du das? Ist der Empfänger überlastet oder wartet? Gerade wenn es den Eindruck gibt, dass es bei geringer Systemlast auftritt deutet darauf hin, dass mehr Messages gesendet werden als vom Empfänger bearbeitet werden können. (Bei Nutzung der GUI hat ja der Mainthread mehr zu tun als wenn Feierabend ist.)

Vielleicht hilft ja die Anmerkung,

Gruß GuaAck
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.11.13 00:45 
user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
wie erzeugt man die .dbg-Datei? Unter den Compiler-Direktiven (allerdings "nur" Delphi 7 Personal) habe ich nichts gefunden.
Dafür gibt es Tools:
sourceforge.net/projects/tds2dbg/

Für diesen Beitrag haben gedankt: Martok