In meinem Testprogramm wird das Funktionieren des
In den
Zu jedem Thread wird eine
Es kann vorgegeben werden, auf wieviel Kernen die Threads arbeiten sollen, hier wird (n-1) vorgegeben, dies wird mit
gemacht, wobei
Je nach dem, wo (d.h. wann) in der Threadprozedur das Reset-Event gesetzt wird, wird auf den jeweiligen Zeitpunkt (hier - Checkbos-schaltbar: Start oder Beendigung) getriggert und das Programm setzt seinen Lauf fort.
Über entsprechende Testausgaben kann der Ablauf verfolgt werden, dies erfolgt über die Konsole (Ausgabe - Debuggen).
Ein Invoken in den Main-Thead ist nicht möglich, da das Warten auf das Sync-Signal die GUI anhält.
Um den Threads etwas zu tun zu geben, lasse ich sie ein paar
ThreadPools
demonstriert.In den
ThreadPool
können max. 64 Threads gepackt werden (Systemgrenze, bei größeen Werten kommt eine entsprechende Exception).Zu jedem Thread wird eine
ManualResetEvent
-Instanz angelegt, mit der auf ein Signal aller Threads gewartet werden kann.Es kann vorgegeben werden, auf wieviel Kernen die Threads arbeiten sollen, hier wird (n-1) vorgegeben, dies wird mit
gemacht, wobei
all
eine Variable ist, bei der für jeden zu nutzenden Kern das kommunizierende Bit gesetzt ist.Je nach dem, wo (d.h. wann) in der Threadprozedur das Reset-Event gesetzt wird, wird auf den jeweiligen Zeitpunkt (hier - Checkbos-schaltbar: Start oder Beendigung) getriggert und das Programm setzt seinen Lauf fort.
Über entsprechende Testausgaben kann der Ablauf verfolgt werden, dies erfolgt über die Konsole (Ausgabe - Debuggen).
Ein Invoken in den Main-Thead ist nicht möglich, da das Warten auf das Sync-Signal die GUI anhält.
Um den Threads etwas zu tun zu geben, lasse ich sie ein paar
Math.Atan2()
-Aufrufe abarbeiten, was dazu führt, dass alle benutzte Kerne in die 100%-Auslastung gehen. Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!