Einzelnen Beitrag anzeigen

Benutzerbild von TERWI
TERWI

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

Brauche ich einen Thread ?

  Alt 15. Sep 2009, 17:54
Ich hab hier nen DVB-Programm, für welches ich eine (nicht die erste...) DLL als Plugin geschrieben habe.
Ich lasse mir von dort über eine CallBack-Routine EPG-Daten geben und füttere damit fortlaufend meine eigene Datenbank.
Dabei prüfe ich, ob neue Daten gekommen sind und ob ich meine Anzeige ggf. Updaten muss.
Dazu muss ist logo die Daten - hängen erst mal in div. TList's aus Record's - auf mal in meiner DLL 'anfassen'.

Jetzt ist kommen diese Daten natürlich nicht regelmäßig und gelegentlich auch in Massen nacheinander.
Erwartungsgemäß kommt es zu Access-Violations....

Ich hatte das zuerst mit einem Thread versucht, in dem die CB läuft. Das ging irgendwie aber gar nicht.
Dann habe ich es mittels Holzhammermethode nun erst mal so gelöst:

Ein Timer ruft im Sekundentakt und sperrt zu Anfang mittels einer globalen Variablen IGNORE_CB := true die CallBack-Funktion.
(prüft Ignore-CB und exit...)
So wird erfolgreich nichts an den Daten geändert (hinzufügen, ändern, löschen).
Ich kann dann so lange wie ich will mit den Daten was anstellen.
Am Ende der Timer-Funktion setze ich IGNORE_CB wieder auf false.
Damit verpasse ich ggf. ne Menge (vorhandener) Daten, aber die wiederholen sich ja fortlaufend.

Neuerdings bekomme ich aber sporadisch und nicht wirklich nachvollziehbar wieder Zugriffsverletzungen.
An der Programmstruktur habe ich nichts weiter geändert...

Hat jemand ne schlauere Idee ?
Hab ich was mit dem Thread falsch aufgezogen ?
Muss man sonst noch was beachten ?

Ergänzung:
Ich habe mal ein CriticalSection.Enter an den Anfang und ein Leave ans Ende der CallBack gestellt.
Ändert auch nicht wirklich was an gelegentlichen Zugriffsverletzungen.
  Mit Zitat antworten Zitat