AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Thread-sicheres dekrementieren einer Variable (SyncObjs)
Thema durchsuchen
Ansicht
Themen-Optionen

Thread-sicheres dekrementieren einer Variable (SyncObjs)

Ein Thema von a.def · begonnen am 27. Dez 2016 · letzter Beitrag vom 27. Dez 2016
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

Thread-sicheres dekrementieren einer Variable (SyncObjs)

  Alt 27. Dez 2016, 14:07
In der Unit SyncObjs gibt es ein paar schöne Funktionen, um thread-sicher Variablen hochzuzählen.
Es gibt auch eine um den Wert zu dekrementieren - aber immer nur um den Wert 1. Etwas wie Dec(MeinInt, 100) scheint es nicht zu geben.

Daher meine Idee TInterLocked.Add zu verwenden. In etwa so
Delphi-Quellcode:
var
 i, j: Integer;
begin
 i := 100;
 j := 2;

 TInterLocked.Add(i, j); // => 102
 TInterLocked.Add(i, (j)*-1); // => 99
Ist das so noch halbwegs korrekt und anwendbar oder ist das nicht in Ordnung?
Etwas anderes kann ich leider nicht machen. Es gibt zwar wie gesagt TInterLocked.Decrement, aber dort kann ich keinen zweiten Parameter angeben.

Geändert von a.def (27. Dez 2016 um 14:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Thread-sicheres dekrementieren einer Variable (SyncObjs)

  Alt 27. Dez 2016, 14:20
Das ist vollkommen in Ordnung so. Wenn du mal in die Implementation von TInterlocked.Increment oder TInterlocked.Decrement schaust, dann findest du dort auch nur einen Aufruf von Add .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Thread-sicheres dekrementieren einer Variable (SyncObjs)

  Alt 27. Dez 2016, 14:25
Ok gut zu wissen, danke.
Ich hatte schon Angst, dass Antworten kommen wie "Was machst du wenn..." (Bsp.: wenn i ins Negative geht)
Aber das kann bei Dec() ja genau so passieren was es oft sogar soll.
  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:36 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