Rechercher
 

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 :

Fonction thrd_exit (C ISO 2011)

La fonction thrd_equal La fonction thrd_join


Entête à  inclure

#include <threads.h>

Fonction thrd_exit

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.

Paramètre

Valeur de retour

cette fonction ne renvoit pas de valeur de retour.

Exemple de code

 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;

}
Fichier sample.c : exemple d'utilisation de la fonction thrd_exit

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
$>

Fonctions et types connexes

thrd_busy, thrd_error, thrd_nomem, thrd_success, thrd_timedout
thrd_create
thrd_detach
thrd_join


La fonction thrd_equal La fonction thrd_join