A voir également:
- Problem de thread en c
- Thread - Accueil - Guide réseaux sociaux
- Compte thread - Accueil - Réseaux sociaux
- C'est quoi thread instagram - Accueil - Instagram
- Exception in thread "main" java.awt.illegalcomponentstateexception: contentpane cannot be set to null. ✓ - Forum Programmation
- System thread exception not handled nvlddmkm.sys ✓ - Forum Carte graphique
3 réponses
Utilisateur anonyme
18 janv. 2009 à 17:18
18 janv. 2009 à 17:18
slt, C'est a la compilation que sa bloque ??? Car moi je les compiler et il marche
Utilisateur anonyme
18 janv. 2009 à 22:48
18 janv. 2009 à 22:48
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_aff(void *arg)
{
int *pi = arg;
/* Si l'argument est NULL */
if(pi == NULL) {
return NULL;
}
/* Affichage de l'argument */
printf("Nouveau thread avec un argument valant %d\n",*pi);
/* Liberation de la memoire */
free(pi), pi=NULL;
return NULL;
}
void *thread_sommeEntiersVersDouble(void *arg)
{
double *res = NULL;
/* Recuperation de la valeur de l'argument */
int *pi = arg;
/* Si l'argument est NULL */
if(pi == NULL) {
return NULL;
}
/* Creation d'une section memoire pour le double */
res = malloc(sizeof(*res));
/* Gestion de l'erreur */
if(res == NULL) {
return res;
}
*res = *pi + *(pi+1);
/* Liberation de la memoire */
free(pi), pi=NULL;
return res;
}
int main(void)
{
pthread_t t1, t2;
int *pi_t1 = NULL, *pi_t2 = NULL;
int res;
void *res_thread = NULL;
double *d = NULL;
/*
* Pour passer un argument a un thread, il vaut mieux lui allouer
* la memoire et passer le pointeur.
*/
pi_t1 = malloc(sizeof(*pi_t1));
if(pi_t1 == NULL) {
printf("Erreur dans l'allocation de pi_t1\n");
return EXIT_FAILURE;
}
*pi_t1 = 123;
res = pthread_create(&t1, NULL, thread_aff, pi_t1);
if (res != 0) {
printf("Erreur dans la creation du thread 1 : %d\n",res);
}
/*
* Pour passer un argument a un thread, il vaut mieux lui allouer
* la memoire et passer le pointeur.
*/
pi_t2 = malloc(2*sizeof(*pi_t2));
if(pi_t2 == NULL) {
printf("Erreur dans l'allocation de pi_t2\n");
return EXIT_FAILURE;
}
pi_t2[0] = 35;
pi_t2[1] = 14;
res = pthread_create(&t2, NULL, thread_sommeEntiersVersDouble, pi_t2);
if (res != 0) {
printf("Erreur dans la creation du thread 1 : %d\n",res);
}
/*
* On attend la fin du premier thread, le resultat du
* thread ne nous interesse pas.
*/
res = pthread_join(t1, NULL);
if(res!=0) {
printf("Erreur dans l'attente pour le premier thread\n");
}
/*
* On attend la fin du deuxieme thread,
* le resultat du thread nous interesse.
*/
res = pthread_join(t2, &res_thread);
if(res!=0) {
printf("Erreur dans l'attente pour le deuxieme thread\n");
}
/* Afficher le resultat */
d = res_thread;
if(d != NULL) {
printf("Resultat : %f\n",*d);
}
/*
* Liberation de la memoire :
* - On ne libere pas pi_t1 ou pi_t2, c'est le travail des deux
* autres threads de le faire.
*/
free(d);
d = NULL;
return EXIT_SUCCESS;
}
#include <stdlib.h>
#include <pthread.h>
void *thread_aff(void *arg)
{
int *pi = arg;
/* Si l'argument est NULL */
if(pi == NULL) {
return NULL;
}
/* Affichage de l'argument */
printf("Nouveau thread avec un argument valant %d\n",*pi);
/* Liberation de la memoire */
free(pi), pi=NULL;
return NULL;
}
void *thread_sommeEntiersVersDouble(void *arg)
{
double *res = NULL;
/* Recuperation de la valeur de l'argument */
int *pi = arg;
/* Si l'argument est NULL */
if(pi == NULL) {
return NULL;
}
/* Creation d'une section memoire pour le double */
res = malloc(sizeof(*res));
/* Gestion de l'erreur */
if(res == NULL) {
return res;
}
*res = *pi + *(pi+1);
/* Liberation de la memoire */
free(pi), pi=NULL;
return res;
}
int main(void)
{
pthread_t t1, t2;
int *pi_t1 = NULL, *pi_t2 = NULL;
int res;
void *res_thread = NULL;
double *d = NULL;
/*
* Pour passer un argument a un thread, il vaut mieux lui allouer
* la memoire et passer le pointeur.
*/
pi_t1 = malloc(sizeof(*pi_t1));
if(pi_t1 == NULL) {
printf("Erreur dans l'allocation de pi_t1\n");
return EXIT_FAILURE;
}
*pi_t1 = 123;
res = pthread_create(&t1, NULL, thread_aff, pi_t1);
if (res != 0) {
printf("Erreur dans la creation du thread 1 : %d\n",res);
}
/*
* Pour passer un argument a un thread, il vaut mieux lui allouer
* la memoire et passer le pointeur.
*/
pi_t2 = malloc(2*sizeof(*pi_t2));
if(pi_t2 == NULL) {
printf("Erreur dans l'allocation de pi_t2\n");
return EXIT_FAILURE;
}
pi_t2[0] = 35;
pi_t2[1] = 14;
res = pthread_create(&t2, NULL, thread_sommeEntiersVersDouble, pi_t2);
if (res != 0) {
printf("Erreur dans la creation du thread 1 : %d\n",res);
}
/*
* On attend la fin du premier thread, le resultat du
* thread ne nous interesse pas.
*/
res = pthread_join(t1, NULL);
if(res!=0) {
printf("Erreur dans l'attente pour le premier thread\n");
}
/*
* On attend la fin du deuxieme thread,
* le resultat du thread nous interesse.
*/
res = pthread_join(t2, &res_thread);
if(res!=0) {
printf("Erreur dans l'attente pour le deuxieme thread\n");
}
/* Afficher le resultat */
d = res_thread;
if(d != NULL) {
printf("Resultat : %f\n",*d);
}
/*
* Liberation de la memoire :
* - On ne libere pas pi_t1 ou pi_t2, c'est le travail des deux
* autres threads de le faire.
*/
free(d);
d = NULL;
return EXIT_SUCCESS;
}