Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
18. Nov 2019
Noch mal: In meinem Beispiel wollte ich die Situation simulieren, dass zwei Threads auf ein und denselben Wert zugreifen. Deshalb wird dieser Wert über Exceute aus der Liste gefüllt als auch über einen Button-Klick aus dem Main-Thread. Dies nur um zu testen, ob ich Konflikte erzeugen kann
Im realen Code sendet der Main Befehle in eine Liste des Thread. Diese Befehle werden in Execute aus der...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
17. Nov 2019
Es ist immer das selbe Problem. Wenn man seinen ganzen Sourcecode ausgeben würde, würde der Code zu kompliziert. Reduziert man ihn auf das (vermeintlich) Wesentliche, sieht der Beispielcode kompliziert aus.
In meinem Fall wird Wert in Wirklichkeit von der RS232 zurück geliefert, über AsyncPro.ComPortTriggerAvail erfasst und dort auch Wert gesetzt. D.h. Exceute bekommt davon gar nichts mit....
Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
16. Nov 2019
Danke noch für das Feedback. Dass TMultiReadExclusiveWriteSynchronizer nur bei vielen Lesevorgängen wirklich Sinn macht, war mir bewusst.
Der kurze Sleep kommt daher, dass eingehende Befehle schnell abgearbeitet werden sollen, was aber auch über Event lösbar wäre
Ich habe jetzt meine Anwendung so, dass sie grundsätzlich funktioniert.
Wenn ich aber gewisse Funktionen aktiviere, bekomme ich...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
7. Nov 2019
OK, weitestgehend verstanden (Hoffe ich)
Rein theoretisch und vor allem für mein Verständnis:
TMultiReadExclusiveWriteSynchronizer würde das Problem beseitigen da hier mehrer Lese-Zugriffe möglich wären und diese Werte nie vom Main gesetted werden?
Eigene Section für jedes Property würden das Problem verringern, da es nur beim Zugriff auf dieselbe Prop klemmen würde?
Hängt der Thread...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
7. Nov 2019
Und noch eine Frage hierzuprocedure TMyThread.invokeChangeEvent();
var
_handler: TDataChangeEventHandler;
begin
_handler := getOnChange();
if Assigned(_handler) then
_handler(data);
end;
Warum der Zwischenschritt über _handler? Warum nicht so?
Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
7. Nov 2019
Vielen Dank für das schnelle Feedback. Ein paar Dinge habe ich schon umgesetzt.
Vielleicht kurz beschrieben, an was ich gerade dran bin.
Universelle ComPort-Ansteuerung die je nach Gerät ein oder zwei Befehle automatisch (pollend) schickt und zusätzlich die Möglichkeit hat, zusätzliche Befehle vom Main entgegen zu nehmen, zu senden und Antwort zurück zugeben.
Da die Befehle immer seriell...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by norwegen60,
7. Nov 2019
Hallo zusammen,
ich bin noch nicht ganz ThreadSave arbeite aber daran. Nach dem Lesen einiger Themen habe ich noch eine Verständnisfrage.
Schützt eine CriticalSection den kompletten Thread oder kann die CS auch auf den Zugriff auf eine Property runter gebrochen werden?
In etwa so:
type
TMyThread = class(TThread)
private
FCount:Integer;