AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Brauche ich einen Thread ?

Ein Thema von TERWI · begonnen am 15. Sep 2009 · letzter Beitrag vom 17. Sep 2009
 
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Brauche ich einen Thread ?

  Alt 16. Sep 2009, 18:33
Wie der Titel vermuten lässt, bin ich nicht der Held in Sachen Threads, weil ich damit eher nicht arbeite und diese bisher auch nicht wirklich einsetzen musste.

Versuche ich noch mal eine Erklärung:

Ist allein die CallBack-Routine aktiv und lässt sich durch das DVB-Prog regelmäig 'anschieben', übergebene EPG-Daten mit vorhandenen Daten in meinen Listen aus Records und Arrays auf Aktualität zu prüfen und ggf. neue Daten zu schreiben, ist alles in bester Ordnung.
Da alles dynamisch ist (und sein muss), prüfe ich penibelst auf ungültige Zeiger, Array-Größen, u.s.w.
Diese Routinen sind auch schon etwa 2 Jahre alt und laufen in einer Vorgängerversion in anderer Konstellation problemlos.
Das kann (und hat) wochenlang laufen ohne einen Fehler, Hänger oder sonst was.

Neben den globalen EPG-Daten beschreibe ich weitere globale Variablen, in denen ich mir die Anzahl der aktuell vorhandenen (ggf. upgedateten) EPG-Datensätze (integer, wird max. 50-60.000) merke und was zuletzt gemacht wurde -> Datensatz neu oder update (beides boolean).


Die zeite wichtige Funktion ist ein Timer mit Intervall := 1000.
Hier prüfe ich zunächst mit einer ebenfalls globalen Var, ob sich die Anzahl der aktuellen EPG-Daten seit letzem Aufruf verändert hat (if Total_EPG > Total_EPG_Mem then ...).
Ist das nicht der Fall -> exit.
Wenn doch, werden noch die Var EPG_New und EPG-Update evaluiert und entsprechend reagiert.
Die Reaktion besteht für beide eigentlich nur darin darin, das ich die Datenanzeige nur neu aufbaue (neu, ggf. Sortierung) oder einfach nur auffrische (Update).
Mehr passiert da erst mal/eigentlich nicht...
Ach ja - die func übernimmt auch die eigentliche Display-initialisierung nach Laden vorhandener Daten (Total_EPG_Mem = 0).
Auch habe ich hier mal experimentiert und häppchenweise was per zweitem Timer mit zufälligen Zeiten 'angeboten'.
Kein Problem ...

Wie oben beschrieben blockiert der Timer die CallBack so lange, bis die Anzeige (wieder-) hergestellt ist.
Das hat ne kleine Ewigkeit absolut sauber funktioniert.
Nur kommen jetzt GELEGENTLICH Zugriffsverletzungen.

Es kann also nur am 'Zusammenspiel der beiden Funtkionen liegen, denn jede einzeln für sich lüppt bestens.
Da ich 'nur' der Progger bin und mich nicht wirklich mit Interna und dem Ablauf auf Thread- und/oder Prozessor-Ebene beschäftigt habe (und will), vermute ich folgendes:
-> Die Timer-func ist noch nicht fertig und es kommt ein CallBack
-> CallBack schreibt Daten, die der TImer gerade liest oder umgekehrt
oder
-> ... die DLL selbst 'verweigert' die Annahme (zeitkritisch ?) und das DVB-Prog macht die Access-Violation ?

Wie kann ich das effektiv und dauerhaft verhindern ?
Das passiert wie gesagt NICHT immer - gelegentlich ...
Deshalb die Frage: Brauche ich einen Thread ?
... oder löst der das überhaupt ?
  Mit Zitat antworten Zitat
 


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 20:16 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