AGB  ·  Datenschutz  ·  Impressum  







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

Threads verstehen...

Ein Thema von Gambit · begonnen am 30. Apr 2005 · letzter Beitrag vom 1. Mai 2005
 
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Threads verstehen...

  Alt 30. Apr 2005, 20:31
Hallo,
in meinem anderen Thread(Thread beenden) hatte ich über unerklärliche Hänger in meinem Programm berichtet. Ich habe mal versucht den Fehler zu finden und dazu folgendes kleines Testprogramm mit dem ich dem Fehler scheinbar etwas auf die Spur gehkommen bin. Er liegt im Thread. Dazu erstmal folgende kleine Threadklasse:

Delphi-Quellcode:
unit unit2 ;
interface
uses Classes,windows;

type TConThread = class(TThread)
  private
    fErrCode: Integer;
  public
    constructor Create(CreateSuspended: boolean);
  protected
    procedure Execute; override;
  published
    property ErrCode: integer read fErrCode;
  end;


implementation

constructor TConThread.create(CreateSuspended: boolean);
begin
  inherited create(CreateSuspended);
  freeOnTerminate:= true;
  fErrCode:= -1;
end;


procedure TConThread.Execute;
begin
  Try
    fErrCode:= 0;
    terminate;
  except
    fErrCode:= 1;
    terminate;
  end;
  if Terminated then
    exit;

end;

end.
Der Thread kann eigentlich immer nur die Zahl Null liefern, weil der Except-Block nicht ausgeführt wird.

Wenn ich jetzt folgendes mache:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    i, count: Integer;
begin
  Count:= 0;
  memo1.Lines.Clear;
  memo2.Lines.Clear;
  for i:= 0 to 1000 do
  begin
    aCon:= TConThread.Create(false);
    repeat until (aCon.ErrCode = 0) or ((aCon.ErrCode <> 0) and (aCon.ErrCode <> -1));
    if (aCon.ErrCode <> 0) and (aCon.ErrCode <> -1) then
    begin
      memo2.Lines.Add(intToStr(aCon.ErrCode));
      count:= count+1;
    end;
    memo1.Lines.Add(intToStr(aCon.ErrCode));
  end;
  showMessage(intToStr(count));
end;
stelle ich fest, dass ich in den allermeisten Fällen auch Null zurückbekomme, manchmal aber eben auch nicht. Ich habe bei 1000 Schleifendurchläufen meistens 1-2 oder dreimal etwas anderes bekommen nämlich 76 (woher es das nimmt ist mir schleierhaft)

Bei 100.000 Duchläufen hatte ich einmal 300 und einmal 305 mal die 76.
Bei 1.000.000 Durchläufen dann plötzlich wieder nur 56 mal die Zahl 76.

So, und jetzt kommt ihr...

Gambit
  Mit Zitat antworten Zitat
 


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 04:37 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