Problème avec thread

Résolu
cs_elbok Messages postés 12 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 28 avril 2008 - 5 mars 2008 à 00:24
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 5 mars 2008 à 00:41
j'ai essayé écris ce code(j'utilise Visual C++ mais jécris en C application Win32) parce que c'est ce que je cherche vraiment et je l'ai modifié comme suis:




DWORD __stdcall threadroutine (AP *v,cl *cli)

    //BOOL bEnd = FALSE;
    // Tant que bEnd est à FALSE, on continue
    while(!bEnd) {
        //printf("************ 100 ms passees ************\n"); // On affiche "100" à toute les 100 milisecondes
        verifier_connexion(cli,&v);
  printf("\n");
  Sleep(100);
    }


    return 0;
}

mais il me génère tjr l'erreur suivante;
warning C4047: 'function' : 'unsigned long (__stdcall *)(void *)' differs in levels of indirection from 'unsigned long '


je n'es pas compris ou est le problème.
aidez moi S.V.P c'est trés trés urgent

2 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 mars 2008 à 00:33
Le problème c'est que la routine d'un thread créé avec CreateThread ne peut prendre QU'UN SEUL paramètre. Un pointeur void. Pour passer plusieurs paramètre, on passe un pointeur sur une structure qui contiendra, en membres, les paramètres que tu souhaite passer.

typedef struct {
    int param1, param2;
} params;

...
DWORD __stdcall routine (void *param) {
    ...
    printf("%d %d\n", (params*)param->param1, (params*)param->param2);
    ...
}

...

params toto = {2, 3};
HANDLE hThread = CreateThread(0, 0, routine, &toto, 0, 0);
...

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 mars 2008 à 00:41
Oups:
printf("%d %d\n", ((params*)param)->param1, ((params*)param)->param2);
à la place de
printf("%d %d\n", (params*)param->param1, (params*)param->param2);

C++ (@++)<!--
0
Rejoignez-nous