Thema: Delphi TThread Problem

Einzelnen Beitrag anzeigen

rEzA

Registriert seit: 11. Jul 2005
5 Beiträge
 
#1

TThread Problem

  Alt 11. Jul 2005, 20:10
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
RG
  Mit Zitat antworten Zitat