unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,SyncObjs;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TMyThread=class(TThread)
    private    protected
      procedure Execute();override;
    public  end;var
  Form1: TForm1;implementation{$R *.dfm}
var
h:Thandle;
g_sum:integer;
cs:TCriticalSection;
{ TMyThread }procedure TMyThread.Execute;
var
  i:integer;
  sum:integer;
begin
  sum:=0;
  for i:=1 to 100 do
    sum:=sum + i;
  cs.Acquire;
  g_sum:=sum;
  cs.Release;
  SetEvent(h);
  //turn the signal on
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  ReSetEvent(h);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  cs:=TCriticalSection.Create;
  TMyThread.Create(false);
  if WaitForSingleObject(h,infinite)=WAIT_OBJECT_0 then;
    showmessage(inttostr(g_sum));   //第一次返回的g_sum总是=0
end;end.