begin process at 2012 05 30 13:44:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

THREAD BLOQUE


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

THREAD BLOQUE

vendredi 5 mai 2006 à 13:44:59 | THREAD BLOQUE

lillie69

Membre Club
Bonjour,
nous sommes en train de coder un jeu en réseau(pour 2 joueurs) et notre problème est qu'on voudrait qu'une fois que le 1er joueur ait joué il attende que le 2e joue pour recommencer à jouer.
On a déclaré une variable qu'on incrémente dès qu'un joueur joue.
Mais le 1er joueur qui joue reste bloqué même lorsque le 2e joueur a joué et que celui ci est débloqué.

Thread lancé dans le serveur:
void * jeu(void * voidparam)
{
    CLIENT *client=(CLIENT*) voidparam;   
    int i;
    int numero,compteur=0;
   

    do{
        numero=reception_entier(client->com);
        printf("numero %d\n",numero);
        if(numero > 0){
            client->vaisseau[numero-2]->nb++;
            printf("nb : %d\n",client->vaisseau[numero-2]->nb);
            transmettre_chaine(client->com, msg);
           
            if(client->vaisseau[numero-2]->nb==client->vaisseau[numero-2]->taille){
                printf("le bateau est coule\n");
                transmettre_entier(client->com,1);
                transmettre_chaine(client->com, msg2);
                compteur++;
            }
            else{
             transmettre_entier(client->com,0);
             printf("pas coule\n");
             }
               
        }
        else {
        transmettre_entier(client->com,0);
        printf("pas touche\n");
        }
        printf("-1-joue = %d",joue);
        joue++;
        printf("-2-joue = %d",joue);
        while(joue!=0){
            printf("joue : %d",joue);
            transmettre_entier(client->com,0);
            if(joue==2){
                joue=0;
                transmettre_entier(client->com,1);
            }
        }
           
    }
    while((compteur<4)&&(joue==0));
    pthread_exit(0);
    return NULL;
}


Thread lancé dans le client:
void * jeu(void * voidparam)
{
    JOUEUR *joueur=(JOUEUR*) voidparam;
   

    Case * c;
    int bloque=0,entier,compteur=0;
    c=(Case *)malloc(sizeof(Case) *1);
    do{
        afficher_grille(joueur->grille_jeu);
        c=placer_pion(joueur->grille_jeu);
        //resultat=controle_case(c->y,c->x,joueur->grille);
   
        transmettre_entier(joueur->com,joueur->grille[c->x][c->y]);
   
        if(joueur->grille[c->x][c->y]>0){
            reception_chaine(joueur->com,msg,30);
            printf("%s",msg);
            entier=reception_entier(joueur->com);
            joueur->grille_jeu[c->x][c->y]=1;
            if(entier==1){
                reception_chaine(joueur->com,msg,30);
                printf("%s",msg);
                compteur++;
            }
        }
        else joueur->grille_jeu[c->x][c->y]=2;
        while(bloque==0){
            printf("attente joueur 2");
            bloque=reception_entier(joueur->com);
            printf("nombre bloque : %d",bloque);
            //sleep(1);
        }
       
    }
    while(compteur<4);
    pthread_exit(0);
    return NULL;
}

Merci pour vos réponses.
vendredi 5 mai 2006 à 13:53:09 | Re : THREAD BLOQUE

Joky

Membre Club
SuspendThread
ResumeThread

if(!Meilleur("Joky")) return ERREUR;<

vendredi 5 mai 2006 à 14:03:41 | Re : THREAD BLOQUE

lillie69

Membre Club
désolée pourriez vous etre plus claire svp?
merci
vendredi 5 mai 2006 à 14:15:41 | Re : THREAD BLOQUE

Joky

Membre Club
Bé SuspendThread(hThread); bloque le thread et ResumeThread(hThread) le reprend,

if(!Meilleur("Joky")) return ERREUR;<

vendredi 5 mai 2006 à 16:09:33 | URGENT SVP

lillie69

Membre Club
Le problème se situe au niveau d'une boucle(voir code, j'ai signalé ou est l'erreur)


Thread lancé dans le serveur:
void * jeu(void * voidparam)
{
    CLIENT *client=(CLIENT*) voidparam;   
    int i;
    int numero,compteur=0;
   

    do{
        numero=reception_entier(client->com);
        printf("numero %d\n",numero);
        if(numero > 0){
            client->vaisseau[numero-2]->nb++;
            printf("nb : %d\n",client->vaisseau[numero-2]->nb);
            transmettre_chaine(client->com, msg);
           
            if(client->vaisseau[numero-2]->nb==client->vaisseau[numero-2]->taille){
                printf("le bateau est coule\n");
                transmettre_entier(client->com,1);
                transmettre_chaine(client->com, msg2);
                compteur++;
            }
            else{
             transmettre_entier(client->com,0);
             printf("pas coule\n");
             }
               
        }
        else {
        transmettre_entier(client->com,0);
        printf("pas touche\n");
        }
        printf("-1-joue = %d",joue);
        joue++;
        printf("-2-joue = %d",joue);
        while(joue!=0){
            printf("joue : %d",joue);
            transmettre_entier(client->com,0);
            if(joue==2){
                joue=0;
                transmettre_entier(client->com,1);
            }
        }
           
    }
    while((compteur<4)&&(joue==0));
    pthread_exit(0);
    return NULL;
}


Thread lancé dans le client:
void * jeu(void * voidparam)
{
    JOUEUR *joueur=(JOUEUR*) voidparam;
   

    Case * c;
    int bloque=0,entier,compteur=0;
    c=(Case *)malloc(sizeof(Case) *1);
    do{
        afficher_grille(joueur->grille_jeu);
        c=placer_pion(joueur->grille_jeu);

    
        transmettre_entier(joueur->com,joueur->grille[c->x][c->y]);
   
        if(joueur->grille[c->x][c->y]>0){
            reception_chaine(joueur->com,msg,30);
            printf("%s",msg);
            entier=reception_entier(joueur->com);
            joueur->grille_jeu[c->x][c->y]=1;
            if(entier==1){
                reception_chaine(joueur->com,msg,30);
                printf("%s",msg);
                compteur++;
            }
        }
        else joueur->grille_jeu[c->x][c->y]=2;
        while(bloque==0){                                       le problème est ici,le 1er joueur ne retourne pas dans la suite de la grande boucle de jeu
            printf("attente joueur 2");
            bloque=reception_entier(joueur->com);
            printf("nombre bloque : %d",bloque);
      
        }
       
    }
    while(compteur<4);
    pthread_exit(0);
    return NULL;
}

Merci pour vos réponses.

 

vendredi 5 mai 2006 à 16:58:43 | Re : THREAD BLOQUE

SAKingdom

Membre Club
Bien si la boucle ne se termine jamais c'est que la variable qu'elle évalue est toujours vrai. Donc bloque est toujours egale à 0.

___________________________________________
Les plus grands esprits trouvent toujours une solution

vendredi 5 mai 2006 à 17:01:51 | Re : THREAD BLOQUE

SAKingdom

Membre Club
Je ne vois nulle part un endroit ou bloque est modifié. Si il en existe pas, bien voila le problème. Sinon, bien je comprend pas plus.

___________________________________________
Les plus grands esprits trouvent toujours une solution

vendredi 5 mai 2006 à 19:26:35 | Re : THREAD BLOQUE

lillie69

Membre Club
Si dans la partie serveur, lorsque les deux joueurs ont joué le serveur transmet l'entier 1 au client donc ca devrait débloquer le 1er joueur.
Non?
Je me trompe peut etre...
vendredi 5 mai 2006 à 21:48:45 | Re : THREAD BLOQUE

SAKingdom

Membre Club
Mais tu fais une boucle avec une variable qui reste toujours à 0. Tu fait while(bloque == 0). Mais comme je disais, bloque est définie au début de ta fonction et est initialisé à 0 et je ne vois nulle part dans cette même fonction quelque chose pour modifier la variable. Étant donnée que le while reste toujours vrai car bloque est toujours égal à 0, la boucle est infinie. Où bloque est-il modifier dans ta fonction jeu()????

___________________________________________
Les plus grands esprits trouvent toujours une solution

vendredi 5 mai 2006 à 21:50:14 | Re : THREAD BLOQUE

SAKingdom

Membre Club
Ok daccord je vien de trouver:
bloque=reception_entier(joueur->com);
Bon ok, je regarde ça plus en profondeur et je reviend.

___________________________________________
Les plus grands esprits trouvent toujours une solution


1 2

Cette discussion est classée dans : printf, client, entier, joueur, joue


Répondre à ce message

Sujets en rapport avec ce message

regardez ma source HELP [ par asnow ] BonjourJe debute en C. j'ai voulu apprendre à enregistrer des données dans un fichier, ca a donné ce code .Si vous pouviez me donner des recommandatio je ne comprends pas mon code n'affiche pas ma grille...de morpion [ par nicoworld ] Voilà ben le .exe m'affiche pas ma grille cje ne comprends pas!!!!si quelqu'un peut me dire pourquoi????voilà le code://MORPION 10*10 :#include int ve Affichier un entier en binaire avec printf [ par Muner ] Bonjour a tous,je voudrais savoir comment afficher avec printf un entier (int) en binaire .MERCI MUNER Probleme de fonction sur la bataille navale... [ par YASS_95 ] Bonjour à tous, Je travaille sur un projet qui est le jeu de la bataille navale et j'ai un petit probleme de fonctions... je vais vous expliquer. J'a Bataille Navale en réseau avec Thread [ par lillie69 ] Bonjour,je dois programmer une bataille navale en réseau en utilisant des threads(sous Unix)!J'ai crée les fonctions de ma bataille navale ainsi que m Problème de transmission d'entier d'un client à un serveur [ par lillie69 ] Bonjour, nous devons faire une bataille navale en réseau et nous avons un problème de transmission d'entiers. En fait on envoit des valeurs correctes Puissance 4 [ par ziad91 ] Bonjour,jedoit réalisé un puissance 4 avec le choix de jouer a 2 joueurs ou contre une IA. J'ai bientot fini le 2 joueurs mais le problème c'est que a Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C] [ par matad0r ] Bonjour, bonjour!J'ai récemment créé une petite application client/serveur de rien du tout (je suis débutant), en m'aidant de ça : http://c.developpez Suite de petits calcul (rendue de monaie) [ par nem02004 ] Alors voila, je désire faire un petit programme qui m'indique la monaie à rendre aux clients,pour cela j'entre lr prix de l'article, j'entre le montan Un problème avec l'union en C [ par IHECinformaticien ] Bonsoir/Bonjour, dans le code source au dessous j'ai défini une union qui contient 3 variables: une de type entier, l'autre de type réel et la dernièr


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,806 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales