AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Threads und stack overflow bei Hardware am USB
Thema durchsuchen
Ansicht
Themen-Optionen

Threads und stack overflow bei Hardware am USB

Ein Thema von yogie · begonnen am 17. Mär 2019 · letzter Beitrag vom 18. Mär 2019
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.034 Beiträge
 
Delphi 12 Athens
 
#1

AW: Threads und stack overflow bei Hardware am USB

  Alt 17. Mär 2019, 08:20
Als Datenstruktur käme evtl. auch ein Ringpuffer in Betracht.

Die Frage ist auch, welche Stelle genau den Stacküberlauf auslöst.
Mittels MadExcept oder Eurekalog könnte man im Absturzfall einen
Stacktrace bekommen, der einem das evtl. zeigt.

Eine kostenlose, aber nicht ganz so schöne Stacktrace Variante
findet man in der JEDI JCL.

Evtl. könnte man auch mal auf ein neueres Delphi wechseln, da hat
sich auch beim Multithreading usw. einiges getan und wenn man solche
Drittanbieter Bibliotheken braucht, tut man sich mit neueren Versionen
auch leichter, da die Unterstützung für so alte Versionen inzwischen
doch (verständlicherweise!) schwindet...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
yogie

Registriert seit: 11. Sep 2003
Ort: bei Goslar
213 Beiträge
 
Delphi 6 Professional
 
#2

AW: Threads und stack overflow bei Hardware am USB

  Alt 17. Mär 2019, 08:41
... prima, auch am Wochenende gibt es Antworten.

Bei dem Buffer handelt es sich nur um zwei abwechselnd beschriebene statische Datenfelder. Das ist ausreichend, da es sich um langsame Vorgänge handelt. (alle 10 Minuten eine Messung speichern)

Ich habe jetzt mal die ganzen Threads usw. durch eine Simulation der
Daten ersetzt und bekomme trotzdem einen Gehler. Diesmal ist eine access violation, der stack overflow ist dann wohl ein Folgefehler. Damit hatte
ich nun garnicht gerechnet. Der Fehler tritt erst nach ca. 20 Minuten Laufzeit auf.

Für die Anzeige habe ich mir einen frame gebaut (nichts aufregendes nur ein paar edits und labels), den erzeuge ich beim Start 16 mal als Element
eines Feldes vom type frame. Da werden dann die Daten angezeigt. Ich muss dort mal weiter suchen.

Also threads und Hardware sind wohl erstmal nicht die Schuldigen.
Trotzdem: DANKE
Kompatibilität ist ein Euphemismus für n i c h t einhunderprozentige Austauschbarkeit
http://b-und-l-service.de/

Geändert von yogie (17. Mär 2019 um 09:08 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#3

AW: Threads und stack overflow bei Hardware am USB

  Alt 17. Mär 2019, 13:03
Stack overflows sind normalerweise Folge eines rekursiven Aufrufs einer Routine, eventuell auch indirekt (A -> B -> C -> A ...). Ohne den Kode deiner Execute-Methoden zu sehen (und wie dein Timer mit den Threads interagiert) ist eine weitere Diagnose nicht möglich. Aber ich habe da eher eine Programmierfehler im Verdacht, da der Fehler ja an der Zahl der Aufrufe zu hängen scheint, nicht an der Frequenz.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.678 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Threads und stack overflow bei Hardware am USB

  Alt 17. Mär 2019, 13:59
Neben dem, was Peter Below schrieb, gibt es noch den Fall, dass z.B. durch Application.ProcessMessages ein neuer Timer-Event ausgelöst wird, während der alte noch läuft.
Delphi-Quellcode:
procedure TMyForm.MyTimerTimer(Sender);
begin
  // Code
  Application.ProcessMessages;
  // mehr Code
  Application.ProcessMessages;
  // noch mehr Code
end;
Jedes Application.ProcessMessages kann dazu führen, dass der Timer neu ausgelöst wird, wenn der Code länger läuft als das Timer-Intervall.

Dabei läuft dann auch der Stack ganz langsam voll. Je kürzer das Intervall, desto schneller.
Thomas Mueller
  Mit Zitat antworten Zitat
yogie

Registriert seit: 11. Sep 2003
Ort: bei Goslar
213 Beiträge
 
Delphi 6 Professional
 
#5

AW: Threads und stack overflow bei Hardware am USB

  Alt 18. Mär 2019, 10:05
Hallo zusammen,
nochmals danke!
Das Proplem ist gelöst. Der Stackoverflow hatte mich auf eine falsche Spur gesetzt.
Letzlich war es ein Timer-Event in Zusammenhang mit Application.ProcessMessages. Im Hintergrund liefen unsichtbar 16 kleine Grafiken mit, die erst auf Anforderung des Anwenders angezeigt werden sollen. Die hatte ich übersehen. Je mehr Daten die Grafiken enthielten, desto länger dauerte ihr refresh. Irgendwann war das dann zu lang. Ich denke der Stackoverflow war dann nur ein Folgefehler. Bei der Fehlersuche konnte och die Abbrüche auch ohne die Threads nur mit Dummy-Daten erzeugen. Fazit: wieder was gelernt und immer die komplette Verarbeitungskette anschauen, auch wenn sie für den Anwender unsichtbar ist.
Kompatibilität ist ein Euphemismus für n i c h t einhunderprozentige Austauschbarkeit
http://b-und-l-service.de/
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 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