#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 :