Entwickler-Ecke

Windows API - TThread Problem


Nano-Ware - So 22.07.12 11:45
Titel: TThread Problem
Hey,

ich wollte meine Anwendung durch einen weiteren Thread erweitern. Ich habe mir nun das Tutorial hier durchgelesen: http://www.delphi-treff.de/tutorials/objectpascal/threads/tthread/ Ich habe zuerst mit den Funktionen CreateThread und BeginThread gearbeitet. Schon da spiegelte sich ein Problem heraus. Der erste Code den ich geschrieben habe habe ich mit CreateThread gestartet (Code leider nicht vorhanden). Das hat sogar funktioniert, aber laut dem Tutorial Autor ist ja BeginThread besser, außerdem "Die Parameter entsprechen den bei CreateThread beschriebenen.". Also habe ich einfach mal "CreateThread" durch "BeginThread" ersetzt und bekomm direkt beim Starten des Threads ne Zugriffsverletzung.

Da ich davon keine Ahnung habe, habe ich mir TThread angeschaut. Das funktioniert auch alles, aber ist doch in meinen Augen relativ umständlich. Kann mir jemand eventuell anschaulich erklären, wie ich mit BeginThread arbeite oder mich überzeugen, dass TThread doch gut ist? (:


Andreas L. - So 22.07.12 13:54

Was findest du bei TThread denn umständlich?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type
  TWorker = class(TThread)
  protected
    procedure Execute; override;
  end;

...

procedure TWorker.Execute;
begin
  while not Terminated do
    // Iregndwas machen
end;

// Hauptprogramm:
procedure TForm1.Button1Click(Sender: TObject);
begin
  worker := TWorker.Create(False);
end;


Nano-Ware - So 22.07.12 13:59

Du hast recht. Ich hab bis jetzt immer ein Object vom Typ TWorker erzeugt..


Andreas L. - So 22.07.12 14:04

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
Du hast recht. Ich hab bis jetzt immer ein Object vom Typ TWorker erzeugt..


Das muss man schon machen:


Delphi-Quelltext
1:
worker := TWorker.Create(False);                    


oder meinst du das anders?


Nano-Ware - So 22.07.12 14:40

Okay, muss man dann auch "worker" wieder freigeben?


Narses - So 22.07.12 14:47

Moin!

Sag mal, ist deine Online-Hilfe kaputt oder hat dir einer die Suchmaschinen gesperrt? :suspect:

Es gibt da eine Eigenschaft: TThread.FreeOnTerminate, könnte was für dein Problem sein. :lupe: :idea:

cu
Narses


Nano-Ware - So 22.07.12 14:57

Nein natürlich nicht.. Ich komm mit der Onlinehilfe nur nicht klar und wüsste nicht nach was ich googlen soll. Trotzdem Danke!