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.
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.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货