Participer au site avec un Tip
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 :

Constantes thrd_busy, thrd_error, thrd_nomem, thrd_success, thrd_timedout (C ISO 2011)

Le type thrd_start_t Le type thrd_t


Entête à  inclure

#include <threads.h>

Constantes thrd_busy, thrd_error, thrd_nomem, thrd_success, thrd_timedout

/* Statuts d'erreurs et de sortie. */
enum {     
    thrd_success  = 0,
    thrd_busy     = 1,
    thrd_error    = 2,
    thrd_nomem    = 3,
    thrd_timedout = 4
}

Cette fonction énumération non nommées définit cinq constantes permettant de représenter des status de sortie de fonction et d'erreurs. Voici la signification de chaque constante.

Nom Description
thrd_busy Associée à une erreur due à une ressource temporairement non disponible.
thrd_error Associée à une erreur, sans plus de précision.
thrd_nomem Indique une erreur pour cause de manque de mémoire.
thrd_success Associée à une sortie en succés.
thrd_timeout Associée à une erreur de dépassement de délai.

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 
#include <stdio.h>
#include <stdlib.h>
#include <threads.h>

// La fonction sur laquelle va démarrer notre thread
int threadMain( void * data ) {

    const char * threadName = (const char *) data;

    for ( int i=0; i<1000000; i++ ) {
        printf( "%s - %d\n", threadName, i );
    }

    printf( "My thread is terminated\n" );
    return thrd_success;

}


int main() {

    // On crée un thread.
    thrd_t myThread;
    void * threadName = (void *) "My thread";
    if ( thrd_create( &myThread, threadMain, threadName ) != 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;
    }
    if ( threadResultCode != thrd_success ) {
        fprintf( stderr, "Notre thread ne s'est pas correctement terminé.\n" );
        return EXIT_FAILURE;
    }

    // On sort du programme.
    printf( "Le thread initial/principal s'arrête.\n" );
    return EXIT_SUCCESS;

}
Fichier sample.c : exemple d'utilisation des status d'erreurs et des codes de retours de l'API de threads C.

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_create
thrd_exit


Le type thrd_start_t Le type thrd_t