On 07/24/2010 05:12 PM, Hans-Peter Diettrich wrote:

In the meantime I found one possible use for threadvars: when some subroutine can be called from different threads, it may want to retrieve the thread context, e.g. the thread object itself. Right?
Yep. But of course you can do multiple threads that completely execute the same code (e.g. a Web Server that handles multiple externals requests at the same time.

-Michael

Here a simple test program with threadvars;

unit Unit61;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm61 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyThread = class(TThread)
    procedure execute; override;
  end;

var
  Form61: TForm61;
  test: Integer;
  teststr: String;

  MyThread1, MyThread2 : TMythread;

threadvar threadtest: Integer;



implementation

{$R *.dfm}

function dotest: String;
begin
  inc(test);
  inc(threadtest);
  Result := IntToStr(test) + '/' + IntToStr(threadtest);
end;



procedure TForm61.Button1Click(Sender: TObject);
var s: String;
begin
  s := dotest;
  teststr := teststr + ' ' + s;
  caption := teststr;
end;

procedure TForm61.FormCreate(Sender: TObject);
begin
  test := 10;
  threadtest := 20;
  MyThread1 := TMythread.Create(false);
  MyThread2 := TMythread.Create(false);
end;

{ TMyThread }

procedure TMyThread.execute;
var s: String;
begin
  s:= dotest;
  teststr := teststr + ' .. ' + s;
  while (true) do
    sleep(10000);
end;

end.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to