Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Thread - in Modelbahnsteuerung (https://www.delphipraxis.net/129418-thread-modelbahnsteuerung.html)

js747a 18. Feb 2009 21:01


Thread - in Modelbahnsteuerung
 
Hallo, ich schreibe ein program zur steuerung einer Modellbahn.
Jetz soll das Programm im Hintergrund eine procedure ab-arbeiten.
Da habe ich gedacht ich versuche es mal mit einem Thread. Hiermit habe ich aber bisher keinerlei Erfahrung.

Mein Programm : (ich habe nur die Daten hier rein geschrieben die hierfur wichtig sind)


Delphi-Quellcode:
TFahrstrasse = class
   private
   public
     Procedure EreignisseListeErstellen;

End;

Var FahrstrassenListe[1..10] of of TFahrstrasse;
Im Program wird die procedure
FahrstrassenListe[x].EreignisseListeErstellen aufgerufen und diese schreibt
Ereignisse als String in eine Listbox.

Wie kan ich jetzt ein Thread starten der innerhalb der Fahrstrasse alle Ereignisse ab-arbeitet und sich dan wieder beendet.
So das wenn gleichzeitig mehrere Fahrstrassen gesetzt sind, auch mehrere Thread nebeneinander laufen.




Als beispiel habe ich diesen code probiert.

Delphi-Quellcode:
var  ThreadID: DWORD;      //Thread-ID
      ThreadHandle: THandle; //Rückgabewert von CreateThread

function UnserThread(zahl: integer): LongInt; stdcall;
var i : integer;
begin
//  Sleep(200);
  For i:= 1 to 400 do  Form1.Memo1.Lines.Add('UnserThread ' + intToStr(i));
  Form1.Memo1.Lines.Add('UnserThread ist fertig');
  Result:=0;
end;

procedure TGleisplanForm.Button1Click(Sender: TObject);
begin
  ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@UnserThread), nil, 0, ThreadID);
  if ThreadHandle<>0 then CloseHandle(ThreadHandle);
End;
Es funktioniert auch aber wie kan ich der Function UnserThread eine Variabele,
zb. FahrstrassenListe[1] zuweisen.

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]

quendolineDD 18. Feb 2009 21:07

Re: Thread - in Modelbahnsteuerung
 
Kannst du bitte noch die Delphi-Tags setzen? Dann kann man das alles besser lesen.
Vielleicht solltest du dir mal das Thread-Objekt von Delphi anschauen. Da kannst du einfach von TThread ableiten und hast es einfacher mit der Variablen-übergabe, als das du nur am Pointer übergeben bist.

sirius 18. Feb 2009 21:21

Re: Thread - in Modelbahnsteuerung
 
Du hast einen freien Parameter (der heißt bei dir Zahl und wird derzeit bei CreateThread mit 0 belegt). Dort kannst du natürlich auch einen Pointer zu einem Objekt reinlegen.

Nimm anstatt CreateThread besser BeginThread. Dadurch wird der Speichermanager von Delphi Threadsicher und du kannst das "stdcall" weglassen.

Und noch besser ist, wie bereits beschrieben, TThread zu benutzen.


Beachte, dass du aus dem Thread niemals VCL-Sachen oder globale Variablen verwenden darfst (also kein Form1)

js747a 18. Feb 2009 21:47

Re: Thread - in Modelbahnsteuerung
 
Danke erstmal, ich werde es mal mit TThread versuchen


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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