Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL_net CPU à 100%

Sujet résolu
    8 août 2007 à 10:46:41

    Bonjour à tous !

    Voila, j'utilise la SDL_net sur plusieurs programmes serveurs (ils sont 5).
    J'ai remarqué que le CPU montait dangereusement à 100% une fois les serveurs lancés et redessend à 5% une fois quittés.

    Les programmes écoutent en boucle un port (chacun le sien) et ce sont ces boucles je pense qui prend autant de ressources.

    J'ai mis un SDL_Delay(20); mais ça ne suffit pas.

    Quelqu'un aurait une idée pour optimiser ça ?

    Merci d'avances ^^
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      8 août 2007 à 11:51:22

      ilestoulecode.c ?
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2007 à 13:25:03

        Après recherches et discussion, il s'avère que c'est ce bout de code qui prend la ressource :

        while(SocketStandard == NULL) {
            SocketStandard = SDLNet_TCP_Accept(SocketServeur);
        }


        Ce qui est logique en fait. Je fais une boucle qui écoute un port jusqu'à ce qu'elle trouve une connexion. Le soucis c'est qu'une boucle infinie de ce genre.... aie ! :(

        Ce qu'il aurait fallut, c'es que la fonction SDLNet_TCP_Accept soit "bloquante" pour éviter la boucle, mais ça n'est pas le cas.

        Si quelqu'un à une idée pour eviter cette boucle...
        • Partager sur Facebook
        • Partager sur Twitter
          8 août 2007 à 14:04:28

          Pour réduire, tu pourrais genre écouter le port toutes les 5secondes?
          • Partager sur Facebook
          • Partager sur Twitter
            8 août 2007 à 15:31:59

            Bon, en fait je viens de mettre un usleep(20); dans la boucle.

            usleep() est utilisé sous Linux (je suis sous Ubuntu) pour faire une attente en milliseconde. Sous Linux, la fonction sleep() ne permet que d'y mettre des secondes, contrairement à WIndows qui permet les milli ;)
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2007 à 17:09:42

              usleep(20) c'est un peu court ^^ ... Elle sert à dormir quelques micro-secondes (le u devant représente la lettre "mu")...
              Mais pourquoi tu le fais pas avec les socket de wxWidgets?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                8 août 2007 à 17:46:00

                Il faudrai qu'il se mette a WxWidget.
                • Partager sur Facebook
                • Partager sur Twitter
                  8 août 2007 à 18:02:05

                  Il y est déjà (et il fait même exploser le taux de messages sur http://cfred.free.fr/punbb/ :p ) :D !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 août 2007 à 18:49:20

                    Lol, c'est sur.

                    Ouai, je vais le faire sous wxWidgets. Je savais pas qu'on pouvait le faire au début, j'avais commencé avec la SDL. Maintenant, faut que je remette à jour tout mes programmes.

                    Le truc, c'est que pour les programmes serveurs, je n'utilise pas wxWidgets puisque ça n'est que de la console.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      8 août 2007 à 18:59:10

                      Tu peut faire de la console avec wxwidgets en liant que wxcore.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 août 2007 à 22:40:19

                        Ha super, c'est bon à savoir ça !

                        Je vais étudier ça et l'ajouter à la Faq ;)

                        Merci Davidbrcz ^^
                        • Partager sur Facebook
                        • Partager sur Twitter

                        SDL_net CPU à 100%

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown