Bonjour,

J'ai un projet à réaliser avec une autre personne dans le cadre des cours.
Nous devons reproduire le jeu blokus avec une partie réseau permettant 4 joueurs.
Nous n'avons ni vu les sockets ni la mise en forme d'interface graphique et encore moins les threads en cours.

On m'a proposé la bibliothèque winsock2.h pour la partie réseau et pthread.h pour les threads. Nous utiliserons sûrement GTK pour l'interface.

Quoiqu'il en soit, j'essaye de comprendre un peu comment ça marche. J'ai un problème pour le moment avec les pointeurs génériques. J'ai deux fonctions identiques enfin presque, l'une incrémente de 1 la variable passée par paramètre et l'autre la décrémente.

la fonction passée en paramètre à la fonction pthread create doit toujours avoir le prototype
Code : Sélectionner tout - Visualiser dans une fenêtre à part
void* fonction(void* data);
pour éviter les problèmes de compilation dit le manuel. Ce pourquoi mes fonctions sont construites comme telles.

Je ne comprends pas pourquoi ce satané compilateur me trouve une erreur dans ce que je fais dans mes fonctions.

Auriez vous une idée ?

Merci d'avance !


ERREUR COMPILATEUR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
C:\Users\NOOB\Desktop\thread\main.c||In function `maFonction1':|
C:\Users\NOOB\Desktop\thread\main.c|55|warning: dereferencing `void *' pointer|
C:\Users\NOOB\Desktop\thread\main.c|55|error: invalid use of void expression|
C:\Users\NOOB\Desktop\thread\main.c||In function `maFonction2':|
C:\Users\NOOB\Desktop\thread\main.c|61|warning: dereferencing `void *' pointer|
C:\Users\NOOB\Desktop\thread\main.c|61|error: invalid use of void expression|
||=== Build finished: 2 errors, 2 warnings ===|
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
59
60
61
62
63
64
 
// On inclue les fichiers standard et le header pthread.h
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
 
void *maFonction1( void *data );
void *maFonction2( void *data );
 
int main()
{
    /* Déclaration des threads */
    pthread_t thread1;
    pthread_t thread2;
 
    /* */
    int valeur1=0;
    int valeur2=50;
    int r1=0;
    int r2=0;
 
 while ( valeur1 != 50 || valeur2 != 0 )
       {
           printf("\nF1 : %d \nF2 : %d", valeur1, valeur2);
 
           /* Création des threads */
           r1=pthread_create( &thread1, NULL, maFonction1, (void *)&valeur1);
           r2=pthread_create( &thread2, NULL, maFonction2, (void *)&valeur2);
 
           if ( r1 != 0 || r2 != 0 )
              {
                   perror("pthread_create");
                   return EXIT_FAILURE;
              }
       }
 
    /* On attend la fin des processuss */
    r1=pthread_join( thread1, NULL );
    r2=pthread_join( thread2, NULL );
 
    if ( r1==0 && r2==0 )
       {
           printf("\n Fin des processus correcte");
       }
 
  else {
           perror("pthread_join");
       }
 
    return EXIT_SUCCESS;
}
 
 
void* maFonction1(void* data)
{
    *data= *(int *)data + 1;
    return NULL;
}
 
void* maFonction2(void* data)
{
    *data= *(int *)data - 1;
    return NULL;
}