passer des arguments à _beginthread () – qu’est-ce qui ne va pas?

J’ai ce code et je n’obtiens pas les résultats escomptés … Qu’est-ce qui ne va pas?

typedef struct { int data1; int data2; }t; void foo(int a, int b) { Handle handle; t arg; arg.data1 = a; arg.data2 = b; handle = (HANDLE) _beginthread( myFunc, 0, (void*) &arg); } void myFunc(void *param) { t *args = (t*) param; int x = args->data1; int y = args->data2; printf("x=%d, y=%d\n", x, y); } 

arg est une variable locale définie dans foo – elle sera détruite dès que cette fonction se terminera, mais myFunc qui s’exécute dans un autre thread essaie toujours d’y accéder. Vous devez allouer arg sur le tas et le détruire dans le thread une fois que vous avez terminé.

 void foo(int a, int b) { HANDLE handle; t *arg; arg = (t *)malloc(sizeof(t)); arg->data1 = a; arg->data2 = b; handle = (HANDLE) _beginthread( myFunc, 0, (void*) arg); } void myFunc(void *param) { t *args = (t*) param; int x = args->data1; int y = args->data2; printf("x=%d, y=%d\n", x, y); free(args); } 

Notez également que HANDLE doit être en majuscule.

votre variable arg est une variable locale dans votre fonction foo, elle ne sera donc plus disponible en mémoire après la fin de la fonction.

Vous pouvez donc faire deux choses:

1.définissez votre variable arg globalement.

 typedef struct { int data1; int data2; }t; t arg; 

ou vous pouvez aussi allouer la mémoire pour discuter de l’aide, comme Casablanca l’a expliqué.

Merci Alok.Kr.