Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: So 07.11.10 18:46 
Hey,

ich hab zur Zeit einen HauptThread, der meherer kleine Berechnugs-Threads aufmacht. Es sind immer max 8 kleine Threads am werkeln. Wenn jetzt der Haupt-Thread an der Reihe ist, es aber schon 8 kleine Threads gibt, dann hat der HauptThread nix zu tun (weil er keine neuen Thread erstellen muss) un kann ja eigentlich wieder schlafen gehen. Reicht da ein normales sleep(0); oder gibt es eine Thread spezifische Methode dazu?

Mfg & Thx Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 07.11.10 20:26 
Auf was wartet der Hauptthread? Auf irgend was muss er ja warten, ...
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 07.11.10 20:36 
Ist es ein echter Thread, den du startest, oder meinst du das Programm an sich?

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: So 07.11.10 20:55 
Hey,

der Hauptthread wartet darauf, das einer der kleinen Threads fertig wird. So das er einen neuen Starten kann. Weil halt immer nur 8 kleine gleichzeitig laufen sollen.
Ich mein nen extra Thread. Nich das Proggi an sich.

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: So 07.11.10 22:09 
Guck dir mal WaitFor() an.
Bzw hier eher WaitForMultipleObjects
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 08.11.10 02:54 
Für solche Aufgaben eignen sich Zählsemaphore ganz gut:

Mit der Zahl gewünschter Threads initialisieren und beim Starten eines Threads dekrementieren. Fertige Threads inkrementieren vor ihrem Beenden.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 08.11.10 03:51 
Hey,

dazu müsste ich doch aber zuerst einmal alle Threads erstellen. Und das würde den Speicherverbrauch sprengen. Ich hab das ganze jetzt aber eh etwas anders gelöst. Trotzdem danke für die Hilfe, hab ja was neues gelernt :)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 08.11.10 04:17 
Wie wäre es mit Threadpools: www.michael-puff.de/...ich8.html#x34-520008
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 08.11.10 14:28 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
dazu müsste ich doch aber zuerst einmal alle Threads erstellen. Und das würde den Speicherverbrauch sprengen.

Dann weißt du nicht, was ein Semaphor ist.
Such mal danach besonders im Hinblick auf P() und V()
Das wäre so ziemlich das, was du hier gebrauchen würdest.

Zur Vollständigkeit: Wenn möglich hier kurz deine Lösung erklären. Vl hat das später noch jmd andres.
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 08.11.10 17:20 
Hey,

wie oben geschrieben hab ich es anders gelöst. Es hat sich herausgestellt, das ein Thread der alles der Reihe nach berechnet schneller ist, als die kleinen Threads. Da war wohl der Overheat beim erstellen der neuen Threads zu hoch. Zur Zeit such ich noch nach einer sinnvollen Aufteilung des ganzen, um es wieder MultiCore-fähig zu machen, aber das is ne andere Geschichte...

Nochma zuder Sache mit den Semaphoren:
Die regeln die Zusammenarbeit von mehreren Threads. Sobald die maximale Anzahl des Semaphore erreicht ist, wird jeder weitere Thread der starten (bzw. einen bestimmten Code abarbeiten) will erstmal schlafen geschickt, bis ein anderer fertig ist (grob umrissen).
Mir ist auch grad eingefallen wie man den in meinem Fall richtig benutzt. Hat n bischen länger gedauert. Aber hat sich ja jetzt eh erledigt.

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 08.11.10 17:28 
Dann erzeug nicht jedesmal nen neuen Thread sondern erstell die am Anfang (Overhead an Speicher ist sehr gering im NormalFall) und lass die Warten, bis die ein Signal zum Arbeiten kriegen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 08.11.10 19:01 
Zur Parallelisierung kannst du auch wie von Luckie beschrieben Threads Pools einsetzen. Die Semaphore sind der händische Weg.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.