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 :

Récupérer l'état d'une application


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut Récupérer l'état d'une application
    Bonjour,

    Je suis entrain de coder un interface sur le framebuffer du Raspberry Pi, donc sans utiliser XWindows et sans gestionnaire de fenêtre. J'utilise la SDL pour la partie graphique.

    Mon programme est lancé depuis la console et dessine un interface sur lequel je dispose d'icone correspondant à des applications qui se lance en plein écran (donc sans besoin de X11) comme par exemple Kodi.


    Mon souci est que lorsque je clique sur une icone, j'execute la commande permettant de lancer ladite application (exemple Kodi), mais lorsque je la ferme je ne reviens pas sur mon interface mais sur un ecran noir (il me faut faire CTRL-ALT-F2 et CTRL-ALT-F1 pour revenir sur mon interface).

    Je pense que cela est du au fait que je ne re-dessine pas l'interface mais je ne sais pas comment faire pour corriger ca, j'ai pensé à une machine à état mais je ne sais pas comment récuperer l'état d'une application qui vient d'etre fermé et comment implémenter la machine en elle même.

    Ma fonction permettant de lancer une application ressemble à ca:
    (les applications pouvant être lancées sont contenues dans un vector tabIcone de type icone (une icone contient le nom de l'image et la commande pour lancer l'appli)

    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
     
    SDL_Event event;
    	while(continuer)
    	{
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    			case SDL_QUIT:
    				continuer=false;
    				break;
    			case SDL_KEYDOWN:
    				switch(event.key.keysym.sym)
    				{
    					case SDLK_ESCAPE: //On quitte l'application lorsque l'on appui sur echap
    						continuer = false;
    						break;
    				}
    				break;
    			case SDL_MOUSEBUTTONUP:
    				for(auto &icone : tabIcone) //Pour chaque icone on verifie si l'on a cliqué dessus
    				{
    					if(event.button.button==SDL_BUTTON_LEFT && event.button.x>(icone.getX()) && event.button.x<(icone.getX()+112) && event.button.y>(icone.getY()) && event.button.y<(icone.getY()+112) ) //Si on a cliqué sur l'icone
    						system(icone.getCommande()); //On execute la commande permettant de lancer l'application
    				}
     
    				break;
    		}
    Merci, si vous avez besoin de plus d'infos demander

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Tu ne serais pas en fullscreen, par hasard?
    Il faudrait peut-être fermer ton contexte de dessin (dont SDL_quit), avant de lancer l'application.

    Une application en fullscreen dit entre autre à l'OS de ne rien dessiner d'autre.
    Cela permet de dédier le/les GPU à l'application.

    C'est pour cette raison que certains jeux propose un mode fullscreen-window, qui est une fenêtre prenant tout l'écran.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Et vu que tu utilises SDL_WAitEvent effectivement tu ne redessineras pas tant qu'un évènement n'est pas triggered.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Et ben dit donc, toujours vous

    Oui l'application est en fullscreen et mon interface aussi, je peux pas mettre mon interface en fenetre je pense parce que je suis sur la sortie framebuffer donc pas de gestionnaire de fenetre.

    Si j'utilise SDL_pollevent le comportement sera différent ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    on va appeller l'application Kodi ce sera moins l'embrouille

    leternel -> Quand tu dit de fermer mon interface je vois ce que tu veux faire, je ferme mon interface, je lance kodi (je l'utilise) je ferme kodi et je rouvre mon interface.
    Le souci c'est que dans tout les cas j'arrive pas a déterminer quand kodi est actif ou pas, ou du moins il faudrait que je recupere le signal d'extinction

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Comment exactement lances-tu Kodi?
    Via un thread? auquel cas, il suffirait de faire un join().
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Je lance Kodi en executant à la console la commande, donc je pense que c'est pas dans un thread à part

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Ton Kodi est lancé par le système, surement dans un processus à part.
    On s'en moque.
    Ton application continue de tourner derrière Kodi, quand il s'arrête elle est affichée à l'écran, mais n'a pas de focus et est bloquée en attente d'un évènement.. donc il faut qu'elle reprenne le focus, puis reçoive un évènement. Et t'as de la chance qu'elle réponde encore, un truc pareil sur Windows et ta fenêtre devient "en attente de réponse" puisque tu bloques le main thread et est bonne à être fermée brutalement. Vire ce blocage et laisse-la juste vivre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Même lorsque j'utilise PollEvent ma fenêtre ne se ré-affiche pas, je vois pas ce qui pourrait bloquer le main thread apart ca
    Je veux bien la laisser vivre je suis pas mechant moi

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Bousk: Je me souviens pourquoi j'avais mit waitEvent à la place de PollEvent, tout simplement parce que lorsque je quitte Kodi la souris est à sa derniere position c'est à dire sur l'icone et comme le click à été enregistré ca relance Kodi comme si j'avais reclické

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    alors il faut ignorer ce clic souris.

    Avec un simple bool pour se souvenir qu'il faut ignorer un clic, ca doit se faire facilement.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. [PyQt] Récupérer l'état d'une QCheckBox
    Par parp1 dans le forum PyQt
    Réponses: 1
    Dernier message: 09/02/2006, 23h50
  2. Comment récupérer l'état d'une case à cocher
    Par oursquetaire dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/01/2006, 08h58
  3. [C#] - Récupérer les paramètres passés à une application
    Par linuxludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 14h41
  4. procédure stockée pour renvoyer un état dans une application
    Par erickoffi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 19h05
  5. Réponses: 2
    Dernier message: 04/10/2005, 11h12

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