![]() |
Threads arbeiten nicht prallel !? + CPU-Zuteilungsproblem...
hallo
ich habe ein programm in dem drei threads gestartet werden und arbeiten sollen. der aufruf sieht so aus:
Delphi-Quellcode:
die functionen hab ich von hier (
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; ![]() 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:
wodurch ja die function gestartet wird wenn ich mich nicht irre !?
procedure TThread.Execute;
begin Synchronize(rechne); end; procedure TThread.rechne; begin rechne; schreibe ergebnis nach Form1.Memo.Add.Lines('Ergebnis'); end; 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 |
Re: Threads arbeiten nicht prallel !? + CPU-Zuteilungsproble
Wenn du in der Execute Mthode
![]() |
Re: Threads arbeiten nicht prallel !? + CPU-Zuteilungsproble
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:
Gruß
procedure TThread.Execute;
begin rechne; Synchronize(anzeigen); end; procedure TThread.anzeigen; begin //schreibe irgendwas ins Memo end; Michael |
Re: Threads arbeiten nicht prallel !? + CPU-Zuteilungsproble
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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