Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Threads

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.05.2004, 11:05 Uhr
spaxx



hi Leute,

kann mir jemand erklären, wozu Threads gut sind??? Ich weiß schon wie man welche anlegt und sie aufruft. Aber wie wirken die und was ist der Vorteil???

MFG SPAXX
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2004, 12:14 Uhr
~Kniftendoktor
Gast


Hi Spaxx!

Jedes Programm das gestartet wird, bekommt einen eigenen Speicherbereich zugewiesen, aus dem es ausgeführt wird. Desweiteren wird das Programm als Prozess mit einer eindeutigen ID im Betriebssystem eingetragen. Mit Hilfe dieser ID kann z.B. Windows das Programm nötigenfalls beenden und den Adressraum im Speicher wieder freigeben. Eigentlich ist der Prozess nur eine virtuelle Kennung für jedes Programm und für Programmierer eher unwichtig.
Was wirklich interessant ist, sind die Treads, die einem Prozess zugeordnet werden. Erst wenn ein Thread erzeugt wurde, bekommt das Programm vom Betriebsystem CPU-Zeit zugeschrieben und kann somit seinen Code ausführen. Demnach besitzt jeder Prozess der gestartet wird, mindestens 1 Thread.
Da ein Multi-Threading Betriebsystem wie Windows mehrere Threads parallel verwalten kann, ist das ausführen mehrerer Prozesse (also auch Programme) zur gleichen Zeit möglich (Multi-Tasking). Was würden wir nur ohne diese göttliche Erfindung machen???
Jeder Thread hat eine eigene Prioritätsstufe, auf der er ausgeführt wird. Je höher die Priorität, desto mehr Rechenzeit bekommt er vom Betriebssystem zugeschrieben. Jetzt kann es sein, daß ein Programm viele Berechnungen parallel ausführt, wobei manche wichtiger, manche unwichtiger sind. Normalerweise würden die wichtigen und weniger wichtigen Berechnungen gleich schnell ausgeführt, was aber nicht sehr effektiv wäre. Hier wäre es sinnvoll, zwei neue Threads zu starten und die Berechnungen voneinander zu trennen. Die weniger wichtigen Berechnungen werden in einem Thread mit niedriger Priorität ausgeführt und die wichtigen in einem Thread mit hoher Priorität. Dadurch erreicht man, daß die wichtigen Berechnungen schneller ausgeführt werden. Der "alte" Main Thread würde sich dann weiterhin um die visuellen Komponenten (falls VCL-Anwendung) kümmern.
Dies ist natürlich nur ein Beispiel, warum es sinnvoll sein kann, mehrere Threads zu erzeugen. Auch bei DirectX und generell allen Multimedia-Anwendungen spielen Threads eine große Rolle.
Ich hoffe, ich konnte dir mit diesen Erläuterungen die Welt der Threads ein wenig näherbringen.

Gruß,
Doc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2004, 12:18 Uhr
Kniftendoktor



Huch, ich war ja gar nicht eingeloggt. Hier nochmal mit Login (sorry @ admin)

Hi Spaxx!

Jedes Programm das gestartet wird, bekommt einen eigenen Speicherbereich zugewiesen, aus dem es ausgeführt wird. Desweiteren wird das Programm als Prozess mit einer eindeutigen ID im Betriebssystem eingetragen. Mit Hilfe dieser ID kann z.B. Windows das Programm nötigenfalls beenden und den Adressraum im Speicher wieder freigeben. Eigentlich ist der Prozess nur eine virtuelle Kennung für jedes Programm und für Programmierer eher unwichtig.
Was wirklich interessant ist, sind die Threads, die einem Prozess zugeordnet werden. Erst wenn ein Thread erzeugt wurde, bekommt das Programm vom Betriebsystem CPU-Zeit zugeschrieben und kann somit seinen Code ausführen. Demnach besitzt jeder Prozess der gestartet wird, mindestens 1 Thread.
Da ein Multi-Threading Betriebsystem wie Windows mehrere Threads parallel verwalten kann, ist das ausführen mehrerer Prozesse (also auch Programme) zur gleichen Zeit möglich (Multi-Tasking). Was würden wir nur ohne diese göttliche Erfindung machen???
Jeder Thread hat eine eigene Prioritätsstufe, auf der er ausgeführt wird. Je höher die Priorität, desto mehr Rechenzeit bekommt er vom Betriebssystem zugeschrieben. Jetzt kann es sein, daß ein Programm viele Berechnungen parallel ausführt, wobei manche wichtiger, manche unwichtiger sind. Normalerweise würden die wichtigen und weniger wichtigen Berechnungen gleich schnell ausgeführt, was aber nicht sehr effektiv wäre. Hier wäre es sinnvoll, zwei neue Threads zu starten und die Berechnungen voneinander zu trennen. Die weniger wichtigen Berechnungen werden in einem Thread mit niedriger Priorität ausgeführt und die wichtigen in einem Thread mit hoher Priorität. Dadurch erreicht man, daß die wichtigen Berechnungen schneller ausgeführt werden. Der "alte" Main Thread würde sich dann weiterhin um die visuellen Komponenten (falls VCL-Anwendung) kümmern.
Dies ist natürlich nur ein Beispiel, warum es sinnvoll sein kann, mehrere Threads zu erzeugen. Auch bei DirectX und generell allen Multimedia-Anwendungen spielen Threads eine große Rolle.
Noch was wichtiges zum Schluß. Da alle Threads im gleichen gemeinsamen Adressraum ausgeführt werden, können verschiedene Threads auf die gleichen gemeinsamen Ressourcen zugreifen. Beim Lesezugriff ist dies kein Problem, doch sobald mehrere Threads gleichzeitig einen Speicherbereich überschreiben wollen, kann dies zu großem Chaos und Zugriffsverletzungen führen. Deshalb muß man sicherstellen, daß immer nur ein Thread Schreibzugriff auf einen gemeinsamen Speicherbereich hat. Diese Bereiche kann man z.B. durch den Einsatz von Critical Section Objects sichern (threadsafe machen). Auch beim Zugriff auf VCL-Komponenten ist Vorsicht geboten, da diese normalerweise nur vom Main Thread verändert werden sollten.
Ich hoffe, ich konnte dir mit diesen Erläuterungen die Welt der Threads ein wenig näherbringen.

Gruß,
Doc

Dieser Post wurde am 06.05.2004 um 12:36 Uhr von Kniftendoktor editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.05.2004, 08:11 Uhr
~Unwissende
Gast


Hi Doc,
hast du hierfür vielleicht ein einfaches Quelltextbeispiel, das wäre echt super?
Muss bei meinem speziellen Programmierproblem wohl auch Threads anwenden...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.05.2004, 12:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


such mal in der Forumsuche z.b. nach CreateThread
da solltest du Beispiele zu finden
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: