Partage
  • Partager sur Facebook
  • Partager sur Twitter

programme .exe à ouverture de fenetre unique

lecteur de fichier .wav SDL TTF FMOD

Sujet résolu
    4 mai 2018 à 15:13:05

    Bonjour à celui qui lira,

    j'ai codé un lecteur de fichiers .wav qui fonctionne très bien,

    avec les bibliothèques SDL TTF FMOD ...

    mon problème est le suivant :

    je clique sur un fichier, il ouvre mon programme ... parfait !

    ( je récupère les arguments de la fonction main, etc ... )

    je clique sur un deuxième fichier, il ouvre mon programme ... dans une nouvelle fenêtre ... évidement !

    quelqu'un pourrait-il me dire par quel moyen on peut rendre le programme mono-fenêtre

    donc conserver la même fenêtre mais changer le fichier courant ...

    merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    RicoSozinho
      4 mai 2018 à 16:15:43

      Hello,

      Les réponses que peuvent t'apporter les membres m’intéresse aussi, je n'ai jamais eu ce besoin mais si je devais imaginer des solutions ce serai les suivantes :

      - 1 : Créer un fichier à l'ouverture une sorte de token puis le supprime à la fermeture -> problème : si ton programme plante ou est killé alors le token n'est pas supprimé et tu ne peux plus ouvrir ton programme

      - 2: ouvrir une socket sur un port spécifique  et check s'il est déja utilisé

      • Partager sur Facebook
      • Partager sur Twitter
        5 mai 2018 à 9:40:53

        finalement j'ai créé un fichier qui me sert d'index de lecture

        je le lis à l'ouverture de mon programme et je l'incrémente

        pendant le fonctionnement du programme je vérifie toutes les deux secondes que mon index n'a pas changé

        si j'ouvre un deuxième fichier l'index est incrémenté et fait fermer le programme précédent

        c'est un peu simplet comme solution et ça oblige à aller lire mon fichier index toutes les deux secondes

        mais ça fonctionne bien sans prendre de risque de plantage

        mais je veux bien qu'on me propose d'autre possibilités

        • Partager sur Facebook
        • Partager sur Twitter
        RicoSozinho
          5 mai 2018 à 13:38:06

          Salut,

          Pour répondre au concept de Token, 

          il est assez facile quand on lance un programme de lister les processus qui sont lancés

          (exemple Windows : http://fvirtman.free.fr/recueil/04_05_02_processusliste.c.php )

          Et si tu vois que dans la liste, il y a le nom de ton programme, c'est qu'un autre instance tourne, et tu le refermes.

          Par contre, l'idée est qu'un deuxième ne se lance pas, et non que ça communique avec le premier.

          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            6 mai 2018 à 0:29:16

            Comme il s'agit du même programme, généralement, pour savoir s'il tourne déjà, on utilise un mutex.
            • Partager sur Facebook
            • Partager sur Twitter
              6 mai 2018 à 9:55:54

              Le soucis du Mutex (enfin tel que je le connais, il en existe peut être une autre forme que je ne connais pas), c'est qu'il coordonne des threads, et non des processus. Avec 2 exe qui tournent, on a affaire a du multiprocessus et non du multithread. Dans ce cas, il faut communiquer autrement (socket ou pipe ou .... ou.... ah non... ou signal )
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                6 mai 2018 à 11:53:17

                Sous Windows ça fonctionne (je connais trop peu linux pour m'avancer).

                msdn a écrit:

                You can use a mutex object to protect a shared resource from simultaneous access by multiple threads or processes.)

                Un exemple ici : https://chgi.developpez.com/windows/instance/ 

                • Partager sur Facebook
                • Partager sur Twitter
                  7 mai 2018 à 10:08:38

                  Fvirtman a écrit:

                  Le soucis du Mutex (enfin tel que je le connais, il en existe peut être une autre forme que je ne connais pas), c'est qu'il coordonne des threads, et non des processus. Avec 2 exe qui tournent, on a affaire a du multiprocessus et non du multithread. Dans ce cas, il faut communiquer autrement (socket ou pipe ou .... ou.... ah non... ou signal )


                  Dans le cas d'une execution multi-process et non multi-thread il existe la solution des "shared memory" pour partager des données. (On utilisera alors des semaphores, selon le même principe que les mutex).

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter - Edsger Dijkstra
                    7 mai 2018 à 10:52:15

                    D'accord, je pensais que c'était réservé aux threads ! :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                      14 décembre 2018 à 7:48:09

                      comme je l'ai dit plus haut :

                      finalement j'ai créé un fichier qui me sert d'index de lecture

                      je le lis à l'ouverture de mon programme et je l'incrémente

                      pendant le fonctionnement du programme je vérifie toutes les deux secondes que mon index n'a pas changé

                      si j'ouvre un deuxième fichier l'index est incrémenté et fait fermer le programme précédent

                      c'est un peu simplet comme solution et ça oblige à aller lire mon fichier index toutes les deux secondes

                      mais ça fonctionne bien sans prendre de risque de plantage

                      • Partager sur Facebook
                      • Partager sur Twitter
                      RicoSozinho

                      programme .exe à ouverture de fenetre unique

                      × 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