AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Threads arbeiten nicht prallel !? + CPU-Zuteilungsproblem...
Thema durchsuchen
Ansicht
Themen-Optionen

Threads arbeiten nicht prallel !? + CPU-Zuteilungsproblem...

Offene Frage von "g1o2k4"
Ein Thema von g1o2k4 · begonnen am 17. Feb 2007 · letzter Beitrag vom 17. Feb 2007
Antwort Antwort
g1o2k4

Registriert seit: 29. Aug 2006
57 Beiträge
 
#1

Threads arbeiten nicht prallel !? + CPU-Zuteilungsproblem...

  Alt 17. Feb 2007, 15:11
hallo

ich habe ein programm in dem drei threads gestartet werden und arbeiten sollen.
der aufruf sieht so aus:

Delphi-Quellcode:
Procedure TForm1.ButtonClick(Sender: TObject); //hauptprogramm
begin
    SetThreadAffinityMaskByID(GetCurrentThreadId, 1); //Hauptprogramm CPU
  MyThread1 := TDecrypt.Create(a, b , x, w);
    SetThreadAffinityMaskByID(MyThread1.ThreadID, 2); //Thread1 CPU
  MyThread2 := TDecrypt.Create(c, d, x, w);
    SetThreadAffinityMaskByID(MyThread12.ThreadID, 3); //Thread2 CPU
  MyThread3 := TDecrypt.Create(e, f, x, w);
    SetThreadAffinityMaskByID(MyThread3.ThreadID, 4); // Thread3 CPU
end;
die functionen hab ich von hier (http://www.delphipraxis.net/internal...read+prozessor), ich bin mir nicht sicher ob sie hier richtig sind, aber eigentlich sollten diese anweisungen den hauptprozess auf cpu0 und die drei threads auf cpu 1-3 verteilen, was aber nicht geschieht

alle drei threads tun das selbe nur in unterschiedlichen bereichen (a-b; c-d; e-f). in den threads sieht das so aus:
Delphi-Quellcode:
procedure TThread.Execute;
begin
    Synchronize(rechne);
end;

procedure TThread.rechne;
begin
  rechne;
  schreibe ergebnis nach Form1.Memo.Add.Lines('Ergebnis');
end;
wodurch ja die function gestartet wird wenn ich mich nicht irre !?

das problem ist aber, dass in delphi angezeigt wird, dass alle 3 threads gestartet wurden, aber alle erst nacheinander arbeiten. also erst arbeitet thread1, wenn er fertig ist wird er beendet und thread2 fängt an zu arbeiten und wird dann ebenfalls beendet worauf thread 3 anfängt und bei abgeschlossener arbeit beendet wird!
liegt es vielleicht am synchronize ?

1. frage wie schaffe ich es den 3 threads je einen anderen prozessorkern zuzuordnen ?
2. wie schaffe ich es alle 3 threads gleichzeitig arbeiten zu lassen, so dass jeder der 3 thread-prozessorkerne 100% auslastung hat ?

grüße g1o
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Threads arbeiten nicht prallel !? + CPU-Zuteilungsproble

  Alt 17. Feb 2007, 15:16
Wenn du in der Execute Mthode Delphi-Referenz durchsuchenSynchronze aufrufst, dann macht der Thread nichts anderes als sich ständig mit dem Hauptthread deiner Anwendung zu synchronisieren und daraufzu warten, dass er aus dem hauotthread zurückkehrt. Und dann brauchst du auch keine hreads wenn dein Thread doch praktisch nur im Kontext des Hauptthreads läuft.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Threads arbeiten nicht prallel !? + CPU-Zuteilungsproble

  Alt 17. Feb 2007, 15:19
Hi

ja, synchronize hält den aufrufenden Thread solange an, bis die übergebene Methode komplett abgearbeitet ist. Also solltest du deine Berechnungen ausführen und dann mittels ner Methode, die du z.B. anzeigen nennen kannst, die Ausgabe auf das Memo schreiben. Also in etwa:

Delphi-Quellcode:
procedure TThread.Execute;
begin
     rechne;
     Synchronize(anzeigen);
end;

procedure TThread.anzeigen;
begin
     //schreibe irgendwas ins Memo
end;
Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von cware
cware

Registriert seit: 15. Feb 2007
Ort: Mannheim
38 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Threads arbeiten nicht prallel !? + CPU-Zuteilungsproble

  Alt 17. Feb 2007, 16:32
Post ebenfalls auf forum.dsdt.info vorhanden:
http://forum.dsdt.info/viewtopic.php?p=203552
> Why is 6 afraid of 7?
< Because 7 8 9!
  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:22 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