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