# Threads in Visual C++



## Davtorik (3. April 2008)

HI ! Ich muss für ein Praktikum zum Thema Systemprogrammierung eine Aufgabe bearbeiten und hab bisher noch nicht ganz den Einstieg gefunden. Nur ein grobes Verständnis wozu Threads dienen und was man mit ihnen erreichen will

Kann jmd von euch mir sagen, wie ich den Einstieg in diese Aufgabe wagen kann, bzw wie ich Schritt für Schritt vorgehen sollte ?

Für manche von euch mag das banal sein, aber ich betrete hiermit programmiertechnisches Neuland 


C++-(Grund)Kenntnisse sind da...

Die Aufgabe habe ich angefügt 


VIelen Dank im Voraus, Dave

_____________________________________



*Motivation*
Objektorientierte Programmiersprachen wie z.B. Java realisieren Nebenläufigkeit in Programmen mittels Thread-Objekten. Bei Java Thread-Objekten handelt es sich um Instanzen einer von der abstrakten Klasse Thread abgeleiteten Klasse. Die abstrakte Thread-Klasse stellt eine Methode für die Thread-Logik bereit, die vom Entwickler in einer eigenen abgeleiteten Klasse überschrieben werden muss. Die abstrakte Klasse Thread in Java stellt unter anderem die folgenden Methoden zur Verfügung:
- run(): Methode, die in einer abgeleiteten Klasse überschrieben werden muss und die Thread-Logik enthält.
- suspend(): unterbricht den Thread, bis er mittels
- resume(): reaktiviert wird.

*Aufgabenstellung*
Kapseln Sie die Win32-Threadfunktionen (CreateThread(), TerminateThread(), etc.) von Visual C++ in Anlehnung an obige Ausführungen möglichst vollständig in einer Klasse. Die für Win32-Threads benötigte Thread-Funktion kann im Konstruktor übergeben werden. Zusätzlich zu den oben Dargestellten soll eine Methode waitForEnd () realisiert werden, die es bei Java-Threads nicht gibt. Der Aufrufer wird hierbei so lange blockiert bis der Thread beendet ist.
Beachten Sie, dass durch die API-Kapselung die Komplexität der Thread-Programmierung verringert werden soll. Es ist nicht verlangt eine abstrakte Klasse wie in Java zu schreiben.
Zum Testen der Klasse soll der arithmetische Ausdruck 2^4^2+cos(0.5)+5! berechnet werden. Zeichnen Sie zunächst einen DAG (siehe Skript ALD Kapitel 14.6) unter Berücksichtigung der Operatorpräzedenzen. Es sollen hierbei möglichst viele Berechnungen parallel ablaufen.


----------



## Matthias Reitinger (3. April 2008)

Davtorik hat gesagt.:


> Kann jmd von euch mir sagen, wie ich den Einstieg in diese Aufgabe wagen kann, bzw wie ich Schritt für Schritt vorgehen sollte ?


Mein Vorschlag:

Die Win32-Threadfunktionen in der MSDN-Bibliothek nachschlagen und einen Überblick verschaffen.
Die Doku zur Java-Klasse Thread durchlesen.
Überlegen, wie sich die Win32-Threadfunktionen in einer Klasse ähnlich der Java-Klasse kapseln lassen (welche Methoden sollte die Klasse anbieten, welche Daten sollte sie speichern…).
Implementieren und testen.

Viel Erfolg! 

Grüße,
Matthias


----------



## devDevil (3. April 2008)

> Win32-Threadfunktionen (CreateThread(), TerminateThread(), etc.) von Visual C++


Hmm wer hat das so verfasst? Visual C++ ist keine Programmiersprache und keine API oder sonst was, sondern ein Compiler & IDE. Von d.h. sind es nicht die Funktionen von VisualC++ sondern es sind die Funktion der WinAPI.

Guck dir mal boost.org an, wie das ordentlich geht. Und vllt. auch die MSDN Library (http://www.msdn.microsoft.com => Library).


----------

