Bonjour,
j'ai une erreur de segmentation quand je compile :
- je suis débutant en C.
- j'utilise un thread selon ce simple et court exemple : http://www.yolinux.com/TUTORIALS/Lin...ixThreads.html
- je veux passer en param la structure thread_handle_t

Ma question :
- est ce que c'est la bonne manière d'écrire l'argument de ask_for_login :
thread_handle_t *th;
pthread_create(&thread_lp, NULL, ask_for_login,(void *)th)
- est ce que j'aurai du déclarer une structure au lieu d'un pointeur vers une structure, cad :
thread_handle_t th;

mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
46
47
48
49
50
51
52
53
54
55
56
57
58
 
void* ask_for_login(void* data) {
    thread_handle_t *th;
    th = (thread_handle_t *)data;
 
  while((*th->use_lp == 0) && (*th->use_sc == 0)){
      printf("ask_for_login...\n");
      login = getchar();
      *th->use_lp = 1;
   }   
  pthread_exit(NULL);
  return  NULL;
}
 
 
 
int main (void) { 
 
  pthread_t thread_lp;
  void* status;
  int cpt = 0;
 
  thread_handle_t *th;
  *th->use_sc = 0;
  *th->use_lp = 0;
 
  printf("veuillez inserer votre carte ou entrer votre login\n");
 
 /* On attend que l'user entre son login */
  if (pthread_create(&thread_lp, NULL, ask_for_login,(void *)th)) { 
    perror("pthread_create"); 
    printf("erreur : pthread_create\n");
    exit(EXIT_FAILURE); 
  }
 
    while((*th->use_lp == 0) && (*th->use_sc == 0)){
      printf("j'attend l'insertion d'une carte...\n");
      sleep(1);
      cpt ++;
      if(cpt == 6){
	*th->use_sc = 1;
	//pthread_kill(thread_lp, 1);
      }
    }
 
    if(*th->use_sc == 1){
      //tuer thread_L;
      printf("Carte inseree, bonjour Aro. Veuillez entrer votre code PIN :\n");
      sleep(3);
    }
    else{
      printf("Veuillez entrer votre mot de passe\n");
      sleep(3);
    }
 
    printf("Authentification terminee\n");
    return (EXIT_SUCCESS);
}
Merci d'avance pour votre aide.