Forum de la communauté SFML

Aide => Général => Discussion démarrée par: yhu420 le Juin 20, 2016, 03:51:02 pm

Titre: [Résolu]Eviter 'Ne réponds pas'
Posté par: yhu420 le Juin 20, 2016, 03:51:02 pm
Bonjour,
Je suis en train de développer un petit projet, et j'autilise souvent une méthode qui ressembe à cela:
void ErrorManager::displayImportantConsole(const std::string& message)
{
        std::cout << message << std::endl;
        std::cout << "Press a key to continue.." << std::endl;
        while (!std::cin.get())
        {
                point_to_window->pollEvent(*point_to_event);
                point_to_window->display();
        }
        fflush(stdin);
}

La boucle a pour seul rôle de faire en sorte que la fenêtre continue de répondre en même temps que la console... en vain.
Je sais bien que ce n'est pas la manière conventionnelle d'utiliser SFML, mais là je cherche juste à comprendre ce qu'il se passe pour la fenêtre.
Ma connaissance sur la gestion des évènements n'est sûrement pas assez grande pour pouvoir résoudre ce problème, alors je compte sur vous  ;D
Merci
Titre: Re : Eviter 'Ne réponds pas'
Posté par: Laurent le Juin 20, 2016, 06:45:56 pm
Très honnêtement je ne sais pas, normalement faire tourner la boucle d'évènements suffit à rendre la fenêtre "vivante". Mais... ne fais juste pas ça :P

Au pire mets l'attente sur std::cin dans un thread, et continuer à faire tourner ton affichage / évènements normalement dans le thread principal.

Si j'ai le temps je regarderai tout de même pourquoi ton code ne fonctionne pas.
Titre: Re : Eviter 'Ne réponds pas'
Posté par: Laurent le Juin 20, 2016, 06:54:17 pm
Désolé c'était stupide... std::cin.get() est bloquant, ta boucle while ne sert à rien.
Titre: Re : Eviter 'Ne réponds pas'
Posté par: yhu420 le Juin 20, 2016, 09:29:19 pm
Ok, merci, j'ai contourné le problème en utilisant ce code (lui aussi, peu orthodoxe):
        std::cout << message << std::endl;
        std::cout << "Press enter to continue.." << std::endl;
        while (!sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
        {
                point_to_window->pollEvent(*point_to_event);
                point_to_window->display();
                std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
        std::this_thread::sleep_for(std::chrono::milliseconds(100));

Merci encore pour ton aide  :D