![]() |
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 |
Re: Threads erstellen
|
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 |
Re: Threads erstellen
Zitat:
|
Re: Threads erstellen
Lesen hilft:
Zitat:
![]() |
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 |
Re: Threads erstellen
Delphi-Quellcode:
soll der Thread eventuell mit übergeben Werten arbeiten und etwas zurückgeben:
//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;
Delphi-Quellcode:
Das wars eigentlich schon.
//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; Florian |
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. |
Re: Threads erstellen
Zitat:
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 |
Re: Threads erstellen
Hi,
mein Test-Programm sieht bisher so aus:
Delphi-Quellcode:
Wenn ich ihn aber ausführen will kommt immer der Fehler:
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. Expeted ':' but '=' found. Wo hab ich den Fehler gemacht ? jeroen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
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