AGB  ·  Datenschutz  ·  Impressum  







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

erster versuch mit threads

Ein Thema von DGL-luke · begonnen am 30. Apr 2005 · letzter Beitrag vom 1. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

erster versuch mit threads

  Alt 30. Apr 2005, 23:51
Habe soeben versucht, meinen ersten thread auf die beine zu stellen. der zweck dieses threads ist es, eine evtl. große zahl von dateinamen einzulesen uind zu manipulieren.

ich habe einfach mal "neues theread objekt" gemacht und alles, was mir relevant erschien, aus der erstellten unit in meine hauptunit kopiert (erster fehler ?!)

dann habe ich einige globale variablen gemacht, auf die der thread zugreifen darf (zweiter fehler?!)

und nun bekomme ich eine AV an adresse 00000000

ich zeig euch mal n bisschen code, nur um zu fragen, ob das denn so überhaupt funktionieren kann......

Delphi-Quellcode:
type
  TCheckThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
  end;

var
  MainForm: TMainForm;
  pop:boolean = false;
  Check: TStringList;
  Checked:TStringList;
  CheckBlocked:boolean=true;
  CheckThread:TCheckThread;
  ToLower:boolean=true;

implementation

{$R *.dfm}

procedure TCheckThread.Execute;
var bad,good:TStringList;
    i,k,count:integer;
    smallcheck:string;
    flags:TReplaceFlags;
    result:TStringList;

begin
  { Thread-Code hier einfügen }

flags:=[rfReplaceAll];
if not checkblocked then
 begin
  result:=TStringList.Create;

  checkblocked:=true;
  routines2.explode(check[0],'|',bad); //search-ausdrücke extrahieren
  routines2.explode(check[1],'|',good); //replace-ausdrücke extrahieren

  //...
  //unkritischer code(hoffe ich)
  //...

   mainform.MProtocol.Lines.Add('Check durchgeführt. Unterschiede: '
     + inttostr(strcomp(result.gettext,check.GetText)));
 end
else mainform.MProtocol.Lines.Add('thread abgebrochen. Kein Zugriff auf Checkliste');
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
 checkthread:=tcheckthread.Create(true);
 checkthread.FreeOnTerminate := true;

 Check:=TStringList.Create;
 Checkblocked:=false;

end;

procedure TMainForm.BSingleOpenClick(Sender: TObject);
begin
check.Assign(readdir(stv1));
check.Insert(0,'ä| '); //bad
check.Insert(0,'ae|_'); //good
checkthread.Execute;
end;
hoffe, der code reicht.
wird durch aufrufen der execute-methode denn überhaupt der thread ausgeführt, oder nur innerhalb des hauptthreads ausgeführt?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: erster versuch mit threads

  Alt 30. Apr 2005, 23:58
Mit Execute wird's im Hauptthread aufgerufen, aber das problem ist (soweit ich das jetzt sehe), dass du das Threadobjekt nicht erstellst. (Dann wird's auch im seperaten Thread abgearbeitet ...)
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#3

Re: erster versuch mit threads

  Alt 1. Mai 2005, 00:16
jfheins meint (Hervorhebung von mir):
Mit Execute wird's im Hauptthread aufgerufen, aber das problem ist (soweit ich das jetzt sehe), dass du das Threadobjekt nicht erstellst. (Dann wird's auch im seperaten Thread abgearbeitet ...)
War das nicht Synchronize()? Ich dachte Execute() ist gerade das, was innerhalb des Threads läuft.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: erster versuch mit threads

  Alt 1. Mai 2005, 00:35
Im gegebenen Kontext hat Heinz schon recht, Mephisto. Wird in einem Thread die Execute() eines TThread-Nachkommens aufgerufen, wird Execute() im aufrufenden Thread ausgeführt, nicht in nem separaten
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#5

Re: erster versuch mit threads

  Alt 1. Mai 2005, 01:30
Weil er den Constructor nicht aufgerufen hat, oder wie? Ich habe TThread ehrlich gesagt nie benutzt.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: erster versuch mit threads

  Alt 1. Mai 2005, 08:26
Zitat von Mephistopheles:
Weil er den Constructor nicht aufgerufen hat, oder wie?
Genau

Entweder den Constructor mit CreateSuspended := FALSE aufrufen, oder mit TRUE und danach resumen, dann läuft's in nem seperaten Thread ab ...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: erster versuch mit threads

  Alt 1. Mai 2005, 12:05
Falls ein Tutorial gesucht wird: http://tutorials.luckie-online.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#8

Re: erster versuch mit threads

  Alt 1. Mai 2005, 13:17
Zitat von jfheins:
Zitat von Mephistopheles:
Weil er den Constructor nicht aufgerufen hat, oder wie?
Genau

Entweder den Constructor mit CreateSuspended := FALSE aufrufen, oder mit TRUE und danach resumen, dann läuft's in nem seperaten Thread ab ...
Okay, danke. Irgendwie finde ich das schon krank. In C++ müßte man die Methode wenigstens als static deklarieren, damit sie "außerhalb" einer Instanz der Klasse aufgerufen werden kann. Eigenartiges Verhalten bei Delphi - habe ich so noch nicht gewußt.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: erster versuch mit threads

  Alt 1. Mai 2005, 14:07
Zitat von jfheins:
Mit Execute wird's im Hauptthread aufgerufen, aber das problem ist (soweit ich das jetzt sehe), dass du das Threadobjekt nicht erstellst. (Dann wird's auch im seperaten Thread abgearbeitet ...)
Zitat von DGL-luke:
checkthread:=tcheckthread.Create(true);
hab ich doch im oncreate meiner mainform schon gemacht ?!

aber das mit resume leuchtet mir ein.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#10

Re: erster versuch mit threads

  Alt 1. Mai 2005, 14:32
Der Punkt ist, daß nach dem Erstellen des Threads (und ggf. Resume) der TThread automatisch die Execute-Methode aufruft. Die brauchst du explizit nicht mehr aufrufen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:27 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