Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SpinLock Thread Synchronization geht nicht auf QuadCore

  Alt 1. Jun 2008, 19:33
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
  Mit Zitat antworten Zitat