AGB  ·  Datenschutz  ·  Impressum  







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

THreads in ein Array schreiben

Ein Thema von bernhard_LA · begonnen am 22. Mär 2012 · letzter Beitrag vom 29. Mär 2012
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 08:28
wieso rufst Du Execute auf? Start wäre im Threadkontext, oder create ohne suspended
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 08:54
ich habe die Berechnung der jeweiligen Teilmatrix in die Routine Thread.execute gepackt.

Vom Verständnis müsste er doch Thread.Execute starten, aber nicht auf die Beendigung dieser Anweisung warten sondern
gleich den nächsten THREAD erzeugen und starten.... sehe ich etwa falsch ?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 09:09
Auf die Art wird das Execute im Kontext des Hauptthreads ausgeführt, wie eine normale Prozedur.
Der Thread ruft nach dem starten intern Execute auf, ein Aufruf von außen macht keinen Sinn.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 14:31
Habe die Antwort nicht ganz verstanden

wenn ich die Zeile tread.execute auskommentiere, rechnet der Thread aber nicht mehr.



------
http://radstudiodemos.svn.sourceforg...i/RTL/Threads/
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#5

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 14:33
Dann schreib doch im Konstruktor (des Threads) als letzte Zeile "Start;" hin.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
flipdascript

Registriert seit: 20. Mai 2008
25 Beiträge
 
Delphi 2010 Professional
 
#6

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 14:35
Falls Du den Thread suspended erstellt hast kannst Du ihn einfach mit Resume starten.
In dem Fall ersetze einfach aFastNCCThread.Execute; durch aFastNCCThread.Resume; .
Du kannst die Threads aber auch nicht suspended erstellen, dann rennen sie sofort nach ihrer Erstellung los.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 17:29
mein Problem besteht darin, ich kann in meiner Schleife i Threads erzeugen
Delphi-Quellcode:
   for i:= 0 to Anzahl Threads do
       
         aThread := TMyThread.Create( Übergabe der Ausgangsmatrizen, Überhabe der Ergbnismatrix);

         aThread.Execute // Berechne hier eine Teilmatrix und dann das Ergebnis in die große Matrix schreiben

      end;
, jeder erzeugte Thread berechnet auch eine TeilMatrix meines Problems, das Endergebnis ist richtig.
leider Ist die Zeit für die Berechnung der Matrizen ohne Threads genauso lange wie für die Berechnung der Matrizen mit 8 Threads auf einem System mit 4 Cores. Meine Erwartung :
T _Threads ~ T_Ohne_Threads / Anzahl_der_Threads.
Ich frage mich halt ob der Code auf die Abarbeitung von thread.execute wartet, die Parallelberechnung klappt irgendwie nicht
Angehängte Grafiken
Dateityp: jpg Thread_problem.jpg (52,6 KB, 3x aufgerufen)

Geändert von bernhard_LA (27. Mär 2012 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#8

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 18:07
Wäre es nicht bequemer, auf etwas Fertiges wie z.B. Andreas' AsyncCalls oder die OmniThreadLibrabry zurückzugreifen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#9

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 18:20
So geht das!
Delphi-Quellcode:
   for i:= 0 to Anzahl Threads do
     TMyThread.Create( Übergabe der Ausgangsmatrizen, Überhabe der Ergbnismatrix);
...
...
Constructior TMyThread.Create (...params);
Begin
  inherited Create(False);
  FreeOnTerminate := True;
  ... initialize your Ausgangsmatrizen and stuff
  Resume; // Nicht nötig, aber lesbar
End;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.379 Beiträge
 
Delphi 12 Athens
 
#10

AW: THreads in ein Array schreiben

  Alt 27. Mär 2012, 18:46
mein Problem besteht darin, ich kann in meiner Schleife i Threads erzeugen
Delphi-Quellcode:
   for i:= 0 to Anzahl Threads do
       
         aThread := TMyThread.Create( Übergabe der Ausgangsmatrizen, Überhabe der Ergbnismatrix);

         aThread.Execute // Berechne hier eine Teilmatrix und dann das Ergebnis in die große Matrix schreiben

      end;
Nein, dein Problem ist, daß du nicht lesen kannnt.

Dir wurde mehrmals gesagt, daß man Execute nicht aufruft. (wird auch in jedem Thread-Tutorial erklärt)
PS: Execute ist mit Absicht als Protected deklariert, damit sollte eigentlich klar werden, daß man dieses nicht von extern aufruft.

Wobei ich die Möglichkeiten der Generics und anonymen Methoden sehr zu schätzen lernte.
Delphi-Quellcode:
TThread.CreateAnonymousThread(procedure
  begin
    ...
    // läuft in einem Thread
    ...
    TThread.Synchronize(nil, procedure
      begin
        ...
        // läuft im Hautthread/VCL-Thread
        ...
      end);
    ...
    // läuft in einem Thread
    ...
    TThread.Synchronize(nil, procedure
      var
        i: Integer;
      begin
        ...
        // läuft im Hautthread/VCL-Thread
        for i := 0 to ...
        ...
      end);
    ...
    // läuft in einem Thread
    ...
  end).Start;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Mär 2012 um 18:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:25 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