#include <threads.h>
void thrd_exit( int exitCode );
Cette fonction permet de terminer le thread exécutant cette méthode. Le code de sortie du thread doit être passé en paramètre.
exitCode : le code de sortie du thread. Si le thread se termine correctement, le code de sortie doit être 0.
Si le thread se termine en erreur, il doit renvoyer un entier différent de 0.
Vous pouvez aussi utiliser les constantes prédéfinie dans l'entête <threads.h> (thrd_success,
thrd_error, ...).
cette fonction ne renvoit pas de valeur de retour.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include <stdio.h> #include <stdlib.h> #include <threads.h> #include <time.h> #define MAX_LOOP 1000 void aFunction() { int value = random() % MAX_LOOP; if ( value == 0 ) { // On arrête le thread, y compris l'appel à threadMain thrd_exit( thrd_success ); } printf( "Un tour de boucle en plus avec %d\n", value ); } // La fonction sur laquelle va démarrer notre thread int threadMain( void * data ) { for( int i=0; i<MAX_LOOP; i++ ) { aFunction(); } return thrd_error; } int main() { // On initialise, avec le temps, le générateur de nombres pseudo-aléatoire. srand( time( NULL ) ); // On récupère l'identifiant du thread principal // (celui qui démarre sur la fonction main. mainThread = thrd_current(); // On crée un thread. thrd_t myThread; if ( thrd_create( &myThread, threadMain, NULL ) != thrd_success ) { fprintf( stderr, "Cannot create thread\n" ); return EXIT_FAILURE; } // On attent la fin d'exécution du thread int threadResultCode; if ( thrd_join( myThread, &threadResultCode ) == thrd_error ) { fprintf( stderr, "Impossible d'attendre le thread\n" ); return EXIT_FAILURE; } // On affiche le code de sortie du thread printf( "Thread exit with code %d\n", threadResultCode ); // On sort du programme. printf( "Le thread initial/principal s'arrête.\n" ); return EXIT_SUCCESS; } |
Pour compiler cet exemple sous environnement Linux/Unix, il est nécessaire de lier la librairie pthread (Posix Thread) à votre exécutable. Voici un exemple de compilation.
$> gcc -o sample sample.c -lpthread $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :