Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Threads erstellen (https://www.delphipraxis.net/75172-threads-erstellen.html)

jeroen_a 15. Aug 2006 13:24


Threads erstellen
 
Hi,

kann mir mal bitte ein kurz sagen wie ich Threads in Delphi nutze.
Um genau zu sein möchte ich wissen wie man sie erstellt und dann aufruft.
Ich ärger mich langsam tot, weils nirgendwo ordendlich erklährt ist. :wall:


jeroen

Balu der Bär 15. Aug 2006 13:26

Re: Threads erstellen
 
http://www.michael-puff.de/Developer...mit_Delphi.pdf

jeroen_a 15. Aug 2006 13:51

Re: Threads erstellen
 
jo das ist schon ganz gut,

aber besser währs ein kleines programm, woran man genau sieht wie's funzt :-D


jeroen

Jelly 15. Aug 2006 13:52

Re: Threads erstellen
 
Zitat:

Zitat von jeroen_a
aber besser währs ein kleines programm, woran man genau sieht wie's funzt

Wühl dich mal bei den Delphi Demos durch... Dort gibts ein Ordnen namens ThreadDemo.

Luckie 15. Aug 2006 13:54

Re: Threads erstellen
 
Lesen hilft:
Zitat:

Zitat von Luckies Tutorial
Bezugsquellen / Downloadmöglichkeiten:
Dieses PDF Dokument und Sourcen der Demos: www.luckie-online.de

Ergo gibt es da auch noch Demos zu: http://www.michael-puff.de/dirindex....phi/Tutorials/

jeroen_a 15. Aug 2006 19:01

Re: Threads erstellen
 
viel danke,

aber es hilf mir auch nciht weiter.

hat vieleicht jemand ein ganz einfaches beispiel, am besten eins wo im thread einfach nur sleep() drin steht.


jeroen

Zacherl 15. Aug 2006 19:07

Re: Threads erstellen
 
Delphi-Quellcode:
//Threadklasse deklarieren und Execute überschreiben
type
  TSelfThread = class(TThread)
    procedure Execute; override;
end;

//Threadvariable deklarieren
var
  SelfThread: TSelfThread;

[..]

procedure TSelfThread.Execute;
begin
  Sleep(10);
end;

procedure Form1Create(Sender: TObject);
begin
  SelfThread := TSelfThread.Create(true); //Thread inaktiv erzeugen
  SelfThread.FreeOnTerminate := true; //Thread nach dem Beenden freigeben
  SelfThread.Resume; //Thread aktivieren
end;
soll der Thread eventuell mit übergeben Werten arbeiten und etwas zurückgeben:

Delphi-Quellcode:
//Threadklasse deklarieren und Execute überschreiben
type
  TSelfThread = class(TThread)
    Value: integer;
    InternI: integer;
    procedure Execute; override;
    procedure UpdateProgress;
end;

//Threadvariable deklarieren
var
  SelfThread: TSelfThread;

[..]

procedure TSelfThread.UpdateProgress;
begin
  Form1.ProgressBar1.Position := InternI;
end;

procedure TSelfThread.Execute;
var
  i,
  int: integer;
begin
  for i := 0 to Value do
  begin
    int := int + 20;
    InternI := i;
    Synchronize(UpdateProgress);
  end;
end;

procedure Form1Create(Sender: TObject);
begin
  //Der Fortschrittsanzeige die Max und Min Werte zuweisen
  ProgressBar1.Min := 0;
  ProgressBar1.Max := 50;
  ProgressBar1.Position := 0;

  SelfThread := TSelfThread.Create(true); //Thread inaktiv erzeugen
  SelfThread.FreeOnTerminate := true; //Thread nach dem Beenden freigeben
  SelfThread.Value := 50; //Werte übergeben
  SelfThread.Resume; //Thread aktivieren
end;
Das wars eigentlich schon.
Florian

C.Schoch 15. Aug 2006 19:29

Re: Threads erstellen
 
Eines ist noch zu beachten soll der Thread eine Variable z.B. ein Boolean direkt ändern muss diese als Pointer übergeben werden.
Außerdem ist diese (IMHO bei jedem Aufruf) mit einer Critical Section zu schützen.

Der_Unwissende 15. Aug 2006 19:30

Re: Threads erstellen
 
Zitat:

Zitat von jeroen_a
aber es hilf mir auch nciht weiter.
hat vieleicht jemand ein ganz einfaches beispiel, am besten eins wo im thread einfach nur sleep() drin steht.

HI,
nebenbei mal Herzlich Willkommen in der DP :dp:
Was dein Problem angeht hat ja gerade schon jmd. eine Lösung gepostet, aber so für's nächste mal, du solltest etwas weniger auf die hellseherischen Fähigkeiten der DP-Mitglieder setzen. Die sind hier wenig ausgeprägt.
Wenn jmd. einfach nur fragt wie funktionieren Threads, dann wirst du immer Links auf Tutorials bekommen, die es erklären. Was dabei deiner Ansicht nach nicht richtig erklärt wird oder was dir weiterhilft weißt nur du, deshalb sag es einfach, dann wissen es auch andere!

Ich glaube ich hatte mir auch mal Luckie's Tutorial angeschaut und hatte es eigentlich recht vollständig in Erinnerung. Wenn du hier also Punkte hast, die dir fehlen wäre es nett wenn du die mal offen nennst (und keine Sorge, der wird dich sicherlich nicht wegen etwas Kritik rausschmeissen!). Es ist nur so, dass die Artikel ganz allgemein für Leute da sind, die ein Tutorial suchen. Sind hier also Dinge zu verbessern/zu vervollständigen, wäre dies doch wichtig zu wissen, da in diese Artikel noch eine Menge Menschen schauen werden.

Gruß Der Unwissende

jeroen_a 15. Aug 2006 22:53

Re: Threads erstellen
 
Hi,

mein Test-Programm sieht bisher so aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  TSelfThread = class(TThread)
    procedure Execute; override;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SelfThread: TSelfThread;
implementation

{$R *.dfm}

procedure TSelfThread.Execute;
begin
  Sleep(10);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SelfThread := TSelfThread.Create(true); //Thread inaktiv erzeugen
  SelfThread.FreeOnTerminate := true; //Thread nach dem Beenden freigeben
  SelfThread.Resume; //Thread aktivieren
end;

end.
Wenn ich ihn aber ausführen will kommt immer der Fehler:
Expeted ':' but '=' found.


Wo hab ich den Fehler gemacht ?


jeroen


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz