/****************************************/
/*                                      */
/*  Prof. Dr. Carsten Vogt              */
/*  Fachhochschule Koeln                */ 
/*  Fakultaet 07, Nachrichtentechnik    */
/*  http://www.nt.fh-koeln.de/vogt      */
/*                                      */
/*  Linux-C-Schnittstelle mit pthreads: */
/*  pthread_exit(), pthread_join()      */
/*                                      */
/****************************************/

// Unter Linux zu uebersetzen mit 'gcc -pthread ...' oder 'cc -pthread ...'

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

// Funktion, die der Thread ausführen soll

void *schlafe(void *schlafzeit) {
 static int exitcode = 3;
 int sz = *(int*)schlafzeit;
 printf("Thread schlaeft %d Sekunden\n",sz);
 sleep(sz);  // Thread blockiert sich eine Zeit lang
 printf("Thread fertig\n");
 pthread_exit(&exitcode);  // Thread beendet sich
}

// Hauptprogramm

int main(int argc, char *argv[]) {
 int schlafzeit = 2;  // Schlafzeit des Threads
 pthread_t thread_nr; // Nummer des Threads
 void *status;        // Rückkehrstatus des Threads
 printf("Main erzeugt Thread\n");
 pthread_create(&thread_nr, NULL, schlafe, &schlafzeit); 
 printf("Main wartet auf Thread in pthread_join()\n");
 pthread_join(thread_nr,&status);
 printf("Main: Thread beendet mit Status %d\n",*(int*)status);
}


