Problem de thread en c

Fermé
rr - 18 janv. 2009 à 16:42
 Utilisateur anonyme - 18 janv. 2009 à 22:48
Bonjour,
qui peut me dire mon erreur :

#include <windows.h>
DWORD WINAPI Thread1(LPVOID lpParameter){
printf("Ceci est ma thread\n");
}
int main()
{
DWORD threadID;
CreateThread(NULL, 0, Thread1, NULL, 0, &threadID);
Sleep(1000);
printf("fin du programme de test\n");
return 0;
}

je remerci toute personne suseptiblre de maider a y voir plus claire dans ce code

3 réponses

Utilisateur anonyme
18 janv. 2009 à 17:18
slt, C'est a la compilation que sa bloque ??? Car moi je les compiler et il marche
0
tu pourai pas me faire un peti exenple dutilisation des thread stp.
0
Utilisateur anonyme
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;
}
0