Hi,
ich habe eine problem in TThread klasse der Delphi festgestellt, dazu eine beispiel:
Delphi-Quellcode:
TMyThread = class(TMyThread)
private
FValue,FTrys: integer;
FGo: boolean;
protected
procedure Execute; override;
procedure Go;
public
constructor Create;
procedure Start(Value: integer);
property Trys: integer read FTrys;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
WaitEvent: TEvent;
...
...
...
procedure TMyThread.Execute;
begin
while not Terminated do
begin
if FGo then Go;
Sleep(1);
end;
end;
procedure TMyThread.Go;
var
i: integer;
begin
FGo := false;
i := 0;
FTrys := 0;
Randomize;
while (i <> FValue) do //Einfach Random solange aufrufen bis die angegbene zahl rauskommt
begin
i := Random(FValue+1);
Inc(FTrys);
end;
WaitEvent.SetEvent;
end;
procedure TMyThread.Start;
begin
FValue := Value;
FGo := true;
FOnNotify := NotifyEvent;
end;
...
...
WaitEvent := TEvent.Create(...);
...
...
procedure TMainfrm.Button1Click(Sender: TObject);
var
Thread: TMyThread;
begin
try
Thread := TMyThread.Create;
Thread.Resume;
Thread.Start(1564);
WaitEvent.WaitFor(INFINITE);
Edit1.Text := IntToStr(Thread.Trys);
finally
Thread.Free;
end;
end;
das programm macht nix anderes, als das Main thread solange zu blockiern bis der erzugte thread fertig wird, aber kommischeweise wird der erzugte thread auch
blockiert , wenn ich jetzt eine thread mit
API-Befehl erzeuge geht es, aber ich verstehe nicht wieso
? Das problem ist in Delphi, wenn man mit
VCL arbeitet muss man auch TThread benutzen weil der
VCL nicht Thread sicher ist. wäre nett wenn jemand mir weiter helfen könnte
.
Danke,
Reza Golriz