sowas könnte gehn
Delphi-Quellcode:
type
TThreadSafeInteger =
record
private
Value: Integer;
public
class operator Implicit(a: TThreadSafeInteger): Integer;
procedure Put (i: Integer);
procedure Add (i: Integer);
procedure Subtract(i: Integer);
procedure Inc;
procedure Dec;
property Get: Integer
read Value;
end;
class operator TThreadSafeInteger.Implicit(a: TThreadSafeInteger): Integer;
begin
result := a.Value;
end;
procedure TThreadSafeInteger.Put(i: Integer);
begin
InterlockedExchange(Value, i);
end;
procedure TThreadSafeInteger.Add(i: Integer);
begin
InterlockedExchangeAdd(Value, i);
end;
procedure TThreadSafeInteger.Subtract(i: Integer);
begin
InterlockedExchangeAdd(Value, -i);
end;
procedure TThreadSafeInteger.Inc;
begin
InterlockedIncrement(Value);
end;
procedure TThreadSafeInteger.Dec;
begin
InterlockedDecrement(Value);
end;
theoretisch ginge auch sowas,
Delphi-Quellcode:
class operator TThreadSafeInteger.Implicit(a: TThreadSafeInteger): Integer;
asm
//mov eax, &a
end;
procedure TThreadSafeInteger.Put(i: Integer);
asm
lock mov [&Self], &i
end;
procedure TThreadSafeInteger.Add(i: Integer);
asm
lock add [&Self], &i
end;
procedure TThreadSafeInteger.Subtract(i: Integer);
asm
lock sub [&Self], &i
end;
procedure TThreadSafeInteger.Inc;
asm
lock inc [&Self]
end;
procedure TThreadSafeInteger.Dec;
asm
lock
dec [&Self]
end;
wenn da nicht der blöde Fehler im LOCK MOV wäre
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project3.exe ist eine
Exception der Klasse EExternalException mit der Meldung 'Externe
Exception C000001E' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------