Was spricht gegen einen Kristischen Abschnitt? Warum musst du auf der Globalen Variablen arbeiten? Reicht es nicht einfach nur das Ergebnis gesichert zu schreiben?
Delphi-Quellcode:
unit ThreadObj;
interface
uses
SysUtils, Classes, Windows, SyncObjs;
type
TDemoThread =
class(TThread)
private
{ Private-Deklarationen}
Fofs: Integer;
FGlobstring :
string;
FCriticalSection:TCriticalSection;
function GetString :
string;
procedure SetString(value:
string);
protected
procedure Execute;
override;
public
constructor create;
destructor destroy;
override;
property ValueString :
string read GetString;
end;
implementation
{ TDemoThread }
constructor TDemoThread.create;
begin
inherited Create(false);
FCriticalSection:=TCriticalSection.Create;
FreeOnTerminate:=true;
end;
destructor TDemoThread.destroy;
begin
FCriticalSection.free;
inherited destroy;
end;
function TDemoThread.GetString :
string;
begin
FCriticalSection.Acquire;
try
Result := FGlobString;
finally
FCriticalSection.Release;
end;
end;
procedure TDemoThread.SetString(Value:
string);
begin
FCriticalSection.Acquire;
try
FGlobString := Value;
finally
FCriticalSection.Release;
end;
end;
procedure TDemoThread.Execute;
var i: Integer;
s:
string;
begin
while not Terminated
do begin
s:='
';
for i:=Fofs
to Fofs+9
do
s:=s+IntToStr(i
mod 10);
Inc(Fofs);
if Fofs > 9
then Fofs:=0;
SetString(s);
end;
end;
end.
Vermutlich bin ich damit aber auch nur am Thema vorbei, sorry falls das so sein sollte.
Gruss
Thorsten