AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TThread Problem

Ein Thema von rEzA · begonnen am 11. Jul 2005 · letzter Beitrag vom 12. Jul 2005
Antwort Antwort
rEzA

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

TThread Problem

  Alt 11. Jul 2005, 19: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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TThread Problem

  Alt 11. Jul 2005, 19:17
warum übergibst du deine "1564" nicht bevor du den Thread mit "Resume" startest? damit würdest du dir erspaaren das du vom Hauptthread unsyncronisiert Variablen in den Thread schreibst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
rEzA

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

Re: TThread Problem

  Alt 12. Jul 2005, 15:16
Zitat von SirThornberry:
warum übergibst du deine "1564" nicht bevor du den Thread mit "Resume" startest? damit würdest du dir erspaaren das du vom Hauptthread unsyncronisiert Variablen in den Thread schreibst.
Das soll nur ein Anwendungsbeispiel sein, es ist klar das es fälligen quatsch ist was ich mache, ich wollte nur damit die Problematik beschreiben. Meine Problem ist eigentlich, wenn man die Main thread irgendwie mit WaitforSingleObject oder ein ähnlicher Befehl blockiert, die andere threads, aber wollgemerkt nur die mit TThread erzeugte Objekte auch blockiert werden.
RG
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz