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