AGB  ·  Datenschutz  ·  Impressum  







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

Ringpuffer Bibliothek veröffentlicht

Ein Thema von TurboMagic · begonnen am 23. Aug 2020 · letzter Beitrag vom 23. Jan 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
TurboMagic

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

Ringpuffer Bibliothek veröffentlicht

  Alt 23. Aug 2020, 11:18
Hallo,

ich habe soeben eine Bibliothek die ich mal geschrieben hatte als OpenSource auf Github veröffentlicht.
Es ist eine generische Ringpufferumsetzung, also ein Ringpuffer den man problemlos für nicht verwaltete
Datentypen wie Bytes, Integer, Double usw. aber auch für Klassen wie TMyWorkItem usw. nutzen kann.

Das Projekt beinhaltet auch DUnit Tests, wobei sich diese nicht so gut in der IDE ausführen lassen, da
auch geworfene Exceptions getestet werden.

Das Projekt befindet sich hier:
https://github.com/MHumm/CircularBuffer

Es wurde ursprünglich in XE8 begonnen, läuft auch in 10.4 und vermutlich auch in älteren Versionen,
wobei deren Nutzer ruhig mal an ein Update denken dürfen

Wer was zum Projekt beitragen möchte gerne: z.B. fehlen noch ein paar Unit Tests (man sieht welche
noch leer sind) oder die Kommentare (und damit meine ich auch XMLDOC!) sind noch alle auf Deutsch.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 23. Aug 2020, 13:00
Warum ist TRingbuffer<T>.Create overload?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 23. Aug 2020, 15:59
Hallo Uwe,

das weiß ich gerade nicht mehr. Gibt's evtl. verschiedene Konstruktoren?
Kannst aber gerne einen Pull Request einreichen. Dann muss ich aber erst
lernen wie man die in Git/Github bearbeitet.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 23. Aug 2020, 16:19
Bin gerade dabei die XMLDOC zu übersetzen...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 23. Aug 2020, 16:27
Cool!
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 3. Jan 2022, 14:44
Der Thread ist schon etwas älter, aber hatte ich ganz aus den Augen verloren,
und bin gerade durch GetIt nochmal draufgestossen worden dass es den RingBuffer gibt.

Soweit ich das sehe ist dieser nicht threadsafe.
Gibt es da Bestrebungen das mal in diese Richtung zu erweitern ?

Ich benutze RingBuffer um Input/Output Ströme zu entkoppeln, die dann mit unterschiedlichen, variablen Datenraten abgearbeitet werden.
Da wäre threadsafety-ness recht praktisch.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 3. Jan 2022, 15:13
Soweit ich das sehe ist dieser nicht threadsafe.
Gibt es da Bestrebungen das mal in diese Richtung zu erweitern ?
Dafür würde ich eine eigene Klasse mit separater Implementierung empfehlen. Ich fände es kontraproduktiv, wenn man die wohl unvermeidlichen Performance-Nachteile auch immer für den non-thread Bereich mitschleppen müsste.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 3. Jan 2022, 16:31
Hallo

der ist vermutlich nicht Thread sicher, jedenfalls war das damals kein Design Ziel.
Was auch noch damit ist: er erlaubt es auch nicht, dass Daten die noch nicht abgerufen
wurden überschrieben werden können.

Sprich: wenn er voll ist un du weitere Daten hinzufügen willst gibt's eine Exception.

Es gab' mal die Überlegung, dafür ein Flag einzubauen und die Klasse so zu erweitern,
dass das wahlweise auch geht, da ich das aber gerade nicht ernsthaft brauche, hab' ich
das noch nicht umgesetzt. Arbeite gerade an anderen Projekten...
...bin aber für Beiträge in diese Richtung und auch in RIchtung einer abgeleiteten Klasse
die Threadsicherheit hinzufügt offen! Lohn ist natürlich die Erwähnung in den Credits!

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 3. Jan 2022, 16:35
Es ist dir ja nicht verboten eine CriticalSection, oder sonstwas hinzuzufügen.

Delphi-Quellcode:
System.TMonitor.Enter(Buffer);
Buffer.Add(irgendwas);
System.TMonitor.Exit(Buffer);

Delphi-Quellcode:
Buffer.Enter;
Buffer.Add(irgendwas);
Buffer.Exit;


type
  TRingbuffer<T> = class(Ringbuffer.TRingbuffer<T>)
    procedure Enter;
    procedure Exit;
  end;

procedure TRingbuffer<T>.Enter;
begin
  System.TMonitor.Enter(Self);
end;
Und vielleicht kommt ja Emba irgendwann in diesem Jahrhundert mal auf die Idee den Schwachsinn bei TMonitor zu reparieren.
> doppelter/missverständlicher Name und umständliche Nutzung (Wenn das eh in TObjekt integriert ist, dann doch bitte richtig)
$2B or not $2B
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 3. Jan 2022, 16:41
Hallo,

was wäre, wenn man in die Ringpuffer Klasse so wie sie jetzt ist,
je eine Enter und Leave (Exit als Name würde ich wegen dem Keyword
Exit eher nicht bevorzugen) Methode einbaut, die virtuell, leer und
inline ist aber an allen relevanten Stellen aufgerufen wird.

Wer dann eine Threadsichere Variante will, braucht nur noch von der
bisherigen ableiten und Enter und Leave passend überschreiben.

Wie wäre das?

Grüße
Turbo Magic
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 07:48 Uhr.
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