Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Thread-sicheres dekrementieren einer Variable (SyncObjs) (https://www.delphipraxis.net/191266-thread-sicheres-dekrementieren-einer-variable-syncobjs.html)

a.def 27. Dez 2016 13:07

Thread-sicheres dekrementieren einer Variable (SyncObjs)
 
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.

Uwe Raabe 27. Dez 2016 13:20

AW: Thread-sicheres dekrementieren einer Variable (SyncObjs)
 
Das ist vollkommen in Ordnung so. Wenn du mal in die Implementation von
Delphi-Quellcode:
TInterlocked.Increment
oder
Delphi-Quellcode:
TInterlocked.Decrement
schaust, dann findest du dort auch nur einen Aufruf von
Delphi-Quellcode:
Add
.

a.def 27. Dez 2016 13:25

AW: Thread-sicheres dekrementieren einer Variable (SyncObjs)
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 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