IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

bloqu� sur mon code


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre r�gulier
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2020
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Finist�re (Bretagne)

    Informations professionnelles :
    Activit� : autre

    Informations forums :
    Inscription : Octobre 2020
    Messages : 8
    Par d�faut bloqu� sur mon code
    Bonjour ,

    je poste mon code d'un petit jeu mais je bloque au niveau de temps �coul� il fait la boucle mais reste bloqu� en attente ?

    je pense qu'ici il y aura surement des comp�tents.
    je pr�cise que je commence le c++ dans mon code j'ai r�cup�r� le bout de code avec future et chrono car il avait de faire ce que je voulais c'est a dire un compte � rebours avec un cin mais l� je bloque. merci de votre compr�hension j'esp�re avoir �t� claire dans mon explication.
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    #include <string>
    #include <future>
    #include <thread>
    #include <chrono>
    #include <unistd.h>
     
    static std::string getAnswer()
    {
        std::string answer;
        std::cin >> answer;
        return answer;
    }
     
    std::string melangerlettres(std::string mot)
    {
        std::string melange;
        int position(0);
     
        while (mot.size() != 0)
        {
            position = rand() % mot.size();
            melange += mot[position];
            mot.erase(position, 1);
        }
        return melange;
    }
     
    int main()
    {
        std::string motMystere, motMelange, motUtilisateur, reponseRejouer;
        srand(time(0));
     
        std::chrono::seconds timeout(5);
     
        do
        {
            std::system("clear");
     
            std::cout << "mot mystere: " << std::endl;
            std::cin >> motMystere;
     
            std::system("clear");
     
            int nombreCoups = motMystere.size();
     
            motMelange = melangerlettres(motMystere);
     
            do
            {
                motUtilisateur = "perdu";
     
                std::cout << "nombre restant d'essais : " << nombreCoups << std::endl;
                std::cout << "\nQuel est ce mot : " << motMelange << std::endl;
     
                std::future<std::string> future = std::async(getAnswer);
     
                if (future.wait_for(timeout) == std::future_status::ready)
                {
                    motUtilisateur = future.get();
                }
     
                std::cout << "heheheheheh" << std::endl;
                //std::system("clear");
                nombreCoups -= 1;
     
                if (nombreCoups < 1)
                {
                    std::cout << "COUPS DEPASSES." << std::endl;
                    motUtilisateur = motMystere;
                }
                else
                {
                    if (motUtilisateur != motMystere)
                    {
                        std::cout << "NON RECOMMENCE." << std::endl;
                    }
                    else
                    {
                        std::cout << "BRAVO." << std::endl;
                    }
                }
            } while (motUtilisateur != motMystere);
     
            std::cout << "\nVoulez-vous rejouer ? (o/n)" << std::endl;
            std::cin >> reponseRejouer;
     
        } while (reponseRejouer == "o" || reponseRejouer == "O");
     
        return 0;
    }

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Bonjour,

    Quand tu appelles async(), tu n'indiques pas que tu veux un traitement asynchrone. Il faut le pr�ciser car sinon le syst�me peut choisir, et risque de faire un appel synchrone.
    Ensuite, s'il y a temps �coul�, tu d�cides d'oublier l'attente pour en faire une nouvelle. Mais l'async est toujours actif, donc l'utilisateur devra entrer le premier mot, puis ressaisir le second pour qu'il soit analys�, le tout en moins de 5 secondes. Si l'utilisateur est tr�s lent, c'est 3 4 5 voire plus de mots � saisir.
    Il faudrait abandonner la saisie en cas de temps �coul�, je ne connais pas de moyen dans le C++ standard. Sinon on pourrais attendre le mot et l'ignorer avant de continuer. �a donne:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
             std::future<std::string> future = std::async( std::launch::async, getAnswer );
     
             if ( future.wait_for( timeout ) == std::future_status::ready ) {
                motUtilisateur = future.get();
             }
             else {
                std::cout << " trop tard, ton mot sera refusé, finis la saisie" << std::endl;
                future.wait();  // attendre la fin, avant de continuer
             }

  3. #3
    Membre r�gulier
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2020
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Finist�re (Bretagne)

    Informations professionnelles :
    Activit� : autre

    Informations forums :
    Inscription : Octobre 2020
    Messages : 8
    Par d�faut
    tout d'abord merci.

    la partie async je pense avoir compris mais part contre le reste j'ai un peu de mal a suivre.

    La o� je ne suis pas le code, c'est lorsque le code attend une frappe apr�s les 5 secondes alors qu'il a bien pris en compte que part default motUtilisateur est bien "perdu", il suis bien la condition if pour recommencer mais bloque en attendant une frappe et touche entr� pour r�p�ter la boucle car si je n'attend pas les 5 secondes le code fonctionne tr�s bien, c'est l� que je ne comprend pas.

    je sais pas si j'ai �t� tr�s claire de mon c�t�.

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Oui, s'il s'est �coul� moins de 5 secondes, ton code r�cup�re la valeur et la g�re correctement.
    Mais si au bout de 5 secondes la touche entr�e n'a toujours pas �t� tap�e, ton code continue en "oubliant" l'entr�e mais le async() lui est toujours en train d'attendre la fin de la saisie, on ne peut pas le "tuer". Donc la prochaine saisie ne sera lue par personne, mais il faudra quand m�me la faire. D'o� mon code o� dans ce cas j'attend cette fin de saisie.
    essaie les 2 codes pour voir ce qu'il se passe.

Discussions similaires

  1. Demande d'aide sur mon code
    Par b.soufiane dans le forum C++
    R�ponses: 6
    Dernier message: 07/12/2007, 16h36
  2. Je bloque sur mon HELLO WORLD
    Par coolawa dans le forum C++
    R�ponses: 19
    Dernier message: 17/05/2007, 01h58
  3. petit probleme sur mon code
    Par MORPHEUS50 dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 2
    Dernier message: 13/05/2007, 18h16
  4. [FFT] Votre avis sur mon code
    Par deubelte dans le forum C++
    R�ponses: 1
    Dernier message: 10/02/2007, 20h14
  5. Doute sur mon code, d�coupage de texte
    Par goblin dans le forum Langage
    R�ponses: 3
    Dernier message: 16/10/2006, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo