PDA

Vollständige Version anzeigen : Thread-Programmierung


amosmann
27.08.2003, 17:07
Kann mir jemand einen kurzen Überblick über Thread-Programmierung geben? Alle Beispiele, die ich gefunden habe, sind so umfangreich, daß man das unwichtige kaum vom Wichtigen trennen kann.
Insbesondere geht es um

VC++ 6.0,
CWinThread,
CSemaphor,
CSingleLock,
CMultiLock,
CCriticalSection

Wenn ich Daten von 2 oder mehr Threads benutze, jeder einen Exclusiv-Zugriff braucht, welche Klassen sollte ich benutzen?

Wenn ein Thread beendet ist, wie erfahren andere Threads davon?

Damit ein Thread die erforderlichen Parameter bekommt, übergibt man ihm eine Struktur, in der diese zu finden sind. Wann erzeugt/löscht man diese am besten?

Danke schön im Voraus

Andreas

doktor
28.08.2003, 10:08
Hallo

Ich habe Threads mit Java2 programmiert.
Sicherlich ist da einiges gleich zu behandeln.



Die einzelne threads sind instanzen der klassen. Die mussen von einander nichs wissen.
Damit ist der zugrif immer exlusive. Falls Du ein thread beendest und den anderen das mitteilen willst,
schrebst Du im Destructor eine entsprechende procedur. Ist aber nicht notwendig.
Die parameter uebergibt man wie immer im Konstructor oder member functions.

gruss doc

amosmann
28.08.2003, 10:28
Danke für Deine prompte Beantwortung, aber leider nützt sie mir nichts.
Ich habe 2 threads, die auf die g l e i c h e n Daten zugreifen.
Ich komme an Synchronisation nicht vorbei. Auch scheint es in Visual C++ etwas komplizierter zu sein. Wer beispielsweise gibt den Speicher wieder frei, in dem dem Thread die Struktur übergeben wurde?

doktor
28.08.2003, 11:13
Hallo

Ich dachte Du brauchst nur ein anstoss. Synchrinisieren war ja nicht drin.
Auf jedem Fall deine wartungsarbeiten finden im destructor statt. Dafuer ist er da um beispielweise den speicher wieder frei zu machen.

gruss
doc

amosmann
28.08.2003, 11:29
vielleicht ja noch einer, der mir helfen kann

Andreas :rolleyes:

Markus.Pelzer
10.11.2003, 18:58
Wenn mehrere Instanzen auf einen Datenbestand zugreifen sollen, kannst Du das über einen Zeiger (Pointer) und einem (statischen) Zähler lösen.

Mit jeder weiteren Instanz wird der Zähler im Konstruktur hochgezählt, wobei die erste Instanz den Speicher initialisieren muss.

Im Destruktor wird der Zähler wieder runtergezählt und der letzte macht das Licht aus (gibt den Speicher frei).

Du kannst die Speicherverwaltung auch außerhalb der Instanzen (gesonderte Klasse) legen, indem jeweils der Pointer auf die Verwalterklasse mitgegeben werden muß.

Ich hoffe, diese Vorschläge helfen dir weiter!

Markus