AGB  ·  Datenschutz  ·  Impressum  







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

Mehrere Threads gleichzeitig...

Ein Thema von glkgereon · begonnen am 31. Jan 2006 · letzter Beitrag vom 31. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 14:34
hi,

ich möchte mehrere Threads eines Typs gleichzeitig ausführen.

dazu habe ich mir überlegt:

ich schreibe mir ganz normal meinen Thread als ableitung von TThread
dann mache ich mir nen array davon und erstelle in ner schleife alle und führe sie aus.

das ganze sieht dann so aus:
Delphi-Quellcode:
    Thr: array [1..Cnt] of TMyThread;

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  for i:=1 to Cnt do
    begin
    Thr[i]:=TMyThread.Create(True);
    //Noch paar Property setzen
    Thr[i].Execute;
    ShowMessage('Thread '+IntToStr(i)+' Executed');
    end;
end;
interessanterweise wird aber nur ein Thread erstellt und ausgeführt...(Cnt ist natürlich >1 )

Anhaltspunkte:
- ShowMessage erscheint nicht
- Ausgabe (via Synchronize) kommt nur vom ersten Thread
- Access Violation beim freigeben ab dem zweiten Thread...

warum macht der nicht einfach in der schleife weiter?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 14:41
Wenn du als Parameter bei create True übergibst, musst du die Threads per Name.Resume; wieder starten.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 14:42
Zitat von ste_ett:
Wenn du als Parameter bei create True übergibst, musst du die Threads per Name.Resume; wieder starten.
könnte ich auch einfach false übergeben?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#4

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 14:46
Natürlich.

Allerdings rennen die Thread dann sofort los.
Wenn du erst noch Werte innerhalb deiner TMyThread-Instanz setzen willst/musst, musst du das im Konstruktor machen, oder bei dem True bleiben und dann mit .Resume; (kein Execute mehr) den Thread wieder starten.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
TGR

Registriert seit: 26. Sep 2005
Ort: Lauben
3 Beiträge
 
Delphi 2005 Enterprise
 
#5

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 14:49
Statt
Thr[i].Execute; musst Du
Thr[i].Resume; schreiben, da sonst keine Properties mehr gesetzt werden können (bzw. es mach dann keinen Sinn)

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 14:52
ok, also das geht jetzt...

aber direkt das nächste problem

wie mach ich die wieder aus?

Delphi-Quellcode:
var i:Integer;
begin
  for i:=1 to Cnt do
    begin
    Thr[i].Suspend;
    Thr[i].Free;
    end;
end;
er bleibt nun beim Thr[i].Free einfach hängen...
und die Threads laufen weiter
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
TGR

Registriert seit: 26. Sep 2005
Ort: Lauben
3 Beiträge
 
Delphi 2005 Enterprise
 
#7

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 15:05
Delphi-Quellcode:
var i:Integer;
begin
  for i:=1 to Cnt do
  begin
    Thr[i].Terminate;
    Thr[i].Priority=tpHigher;
    Sleep(0);
    Thr[i]:=nil;
  end;
end;
Um auf die Beendigung zu warten kannst Du das Ereignis OnTerminate auswerten.

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 15:16
Zitat von TGR:
Delphi-Quellcode:
var i:Integer;
begin
  for i:=1 to Cnt do
  begin
    Thr[i].Terminate;
    Thr[i].Priority=tpHigher;
    Sleep(0);
    Thr[i]:=nil;
  end;
end;
Um auf die Beendigung zu warten kannst Du das Ereignis OnTerminate auswerten.

Thomas
Also im OnTerminate setze ich dann eine Variable auf True, woraufhin dann die Hauptschleife des Threads aufhören sollte...

aber sie tut es nicht.
ich hab so das gefühl das OnTerminate kommt nicht an
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 15:21
Das Suspend ist falsch. Bamit haelst du den Thread ja an und er kann sich garnicht beenden.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Mehrere Threads gleichzeitig...

  Alt 31. Jan 2006, 15:22
Oder du stellst FreeOnTerminate auf True und dann zum ausmachen einfach Thread.Terminate;
(im thread natürlich ein while not Terminated do ... )
  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 13:16 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