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

SDL Discussion :

Impossible de déplacer la fenêtre principale


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Impossible de déplacer la fenêtre principale
    Bonjour à tous,

    J'ai un petit souci: je veux créer un soft pour monitorer sur un deuxième pc ce qui se passe sur un premier pc en terme de mouvement de joysticks, touches enfoncées etc. J'ai donc une appli sur un premier pc qui affiche une croix qui se déplace en fonction des mouvements du joy etc, tout ça développé avec SDL.
    Sur le deuxième pc, j'aimerais que la croix bouge à l'identique, en transmettant des packets UDP qui donnent la position courante du joy.
    Ca c'est pour le but.
    Pour mon appli de "monitoring", j'ai besoin d'une boucle while qui attend les messages udp. J'ai placé la réception des messages udp dans un thread à part.
    Dans cette boucle, je n'ai mis QUE ça:
    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
     
        continuer = 1;
        msg = 0;
        while (continuer)
        {
            switch (msg)
            {
                case MONITOR_IMAGE:
                    msg = 0;
                    break;
                case MONITOR_SON:
                    msg = 0;
                    break;
                case MONITOR_VIDEO:
                    break;
                case MONITOR_KEY:
                    break;
                case MONITOR_JOYX:
                    break;
                case MONITOR_JOYY:
                    break;
                case MONITOR_RESOL:
                    break;
                case MONITOR_QUIT:
                    continuer = 0;
                    msg = 0;
                    break;
            }
        }
    Et là, même en supprimant tout ce qui concerne le réseau, impossible de déplacer la fenêtre SDL, le programme est comme bloqué. Même en ajoutant un SDL_Delay(1000). Quand je mets une boucle qui attend un évènement à la place, tout se passe normalement, je peux déplacer la fenêtre etc. J'ai raté un truc...
    D'où ma question: mais b... que se passe-t-il avec mon code?
    Merci!

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je ne comprends pas tout de ton programme. La boucle que tu as montrée est en fait la boucle qui traite les données mais sans de SDL_PollEvent ?

    Le plus simple pour faire ton programme serait d'avoir un thread qui gére l'entrée réseau et le thread principal qui affiche les informations.

    Le thread réseau gére donc : la réception et la mise à jour des infos
    Le thread d'affichage gére donc : les messages systèmes vers la fenêtre (SDL_PollEvent) et l'affichage des infos.

    Ou n'ai-je rien compris au problème ?
    Jc

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par fearyourself
    Je ne comprends pas tout de ton programme. La boucle que tu as montrée est en fait la boucle qui traite les données mais sans de SDL_PollEvent ?

    Le plus simple pour faire ton programme serait d'avoir un thread qui gére l'entrée réseau et le thread principal qui affiche les informations.

    Le thread réseau gére donc : la réception et la mise à jour des infos
    Le thread d'affichage gére donc : les messages systèmes vers la fenêtre (SDL_PollEvent) et l'affichage des infos.

    Ou n'ai-je rien compris au problème ?
    Jc
    Tu as très bien compris! Alors j'avais trouvé la solution, au lieu de ce switch(msg) tout moche, j'utilise pollevent, et mon thread de gestion réseau push un userevent quand une donnée est reçue. Du coup ça marche pas trop mal, mais je ne comprends toujours pas pourquoi ce code que j'ai posté initiallement empêche la fenêtre d'être raffraichie.
    Merci en tous cas pour ta réponse.
    Et au passage, toi qui a l'air calé en SDL, tu ne saurais pas gérer du dual screen? La raison pour laquelle je fais cette appli de monitoring en utilisant le réseau est que je n'ai pas réussi à faire ça en dual screen. Mon appli réseau ne sera utilisé que sur le localhost, c'est un peu prendre un bulldozer pour écraser une mouche mais j'ai pas vu d'autres solution

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par biz2000
    Tu as très bien compris! Alors j'avais trouvé la solution, au lieu de ce switch(msg) tout moche, j'utilise pollevent, et mon thread de gestion réseau push un userevent quand une donnée est reçue. Du coup ça marche pas trop mal, mais je ne comprends toujours pas pourquoi ce code que j'ai posté initiallement empêche la fenêtre d'être raffraichie.
    Merci en tous cas pour ta réponse.
    Il se peut que sans la gestion des messages, la fenêtre ne passe pas l'information au système pour bouger la fenêtre. Cela doit bien sûr dépendre du système, je pense.

    Bon ce qui est sûr c'est qu'une boucle active et vide comme cela va faire grimper ton utilisation CPU inutilement et risque de ralentir le système.

    Et au passage, toi qui a l'air calé en SDL, tu ne saurais pas gérer du dual screen? La raison pour laquelle je fais cette appli de monitoring en utilisant le réseau est que je n'ai pas réussi à faire ça en dual screen. Mon appli réseau ne sera utilisé que sur le localhost, c'est un peu prendre un bulldozer pour écraser une mouche mais j'ai pas vu d'autres solution
    Pour le moment, le dual screen n'est pas géré par la SDL donc ta solution est la seule solution acceptable (et j'aurais fait pareil).

    Par contre, ca le sera dans une version ultérieure (c'est donc au programme )

    Jc

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Ok merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible de déplacer certaines fenêtres sous Vista
    Par Calan dans le forum Windows Vista
    Réponses: 1
    Dernier message: 30/08/2010, 08h16
  2. erreur " impossible de focaliser une fenêtre désactivée
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/12/2004, 10h21
  3. Fenêtre principale : createwindow ou DialogBox ?
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 02/09/2004, 22h26
  4. Réponses: 2
    Dernier message: 03/08/2004, 10h30
  5. Fenêtre principale et secondaire
    Par FranT dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/07/2002, 19h25

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