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 :

Une message box ne bloquant pas le processus d'un programme : est-ce possible ?


Sujet :

C++

  1. #1
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut Une message box ne bloquant pas le processus d'un programme : est-ce possible ?
    Bonjour,

    Je réalise un service Windows en C++ et mon problème peut être formulé avec le code suivant :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <Windows.h>
     
    void run()
    {
      Sleep(10000); // Attendre 10 secondes
      MessageBox(0, "Mon information", "Information", 0);
      Sleep(20000); // Attendre 20 secondes 
    }

    La MessageBox interrompt le processus dans le sens où le programme ne dure pas exactement 30 secondes ici ; il faut attendre que l'utilisateur ait cliqué sur "OK" pour enclencher la minuterie de 20 secondes. Comment contourner ce problème ? Connaissez-vous d'autres types de fenêtre d'information susceptibles de m'intéresser ? Ou faut-il lancer un thread dans lequel j'appellerais cette fenêtre ?

    Merci pour vos réponses !

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    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 195
    Points : 17 163
    Points
    17 163
    Par défaut
    Bonjour.
    Je ne connais pas l'API, mais il y a peut-être une "non blocking message box". Sinon, un thread peut fonctionner, à condition de ne surtout pas en faire un join.

    Cela dit, pourquoi ces temps d'attentes autour d'une interaction utilisateur?

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    En tout cas un service est normalement conçu pour ne pas avoir d'IHM, je suis très étonné qu'il t'affiche ta message box. Es-tu sûr de développer un service ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 170
    Points : 12 290
    Points
    12 290
    Par défaut
    dragonjoker59, je ne pense pas que Jimmy91 sache ce qu'est un "vrai" Service Windows.

    Jimmy91, MessageBox ne bloque pas le processus, c'est juste une boucle sur le traitement des messages de fenêtre.

    A part MessageBox ou ShowDialog, à peu près toutes les primitives d'affichage de fenêtre n'utilisent pas cette mécanique de boucle.

    Tu as donc plusieurs dizaines de manière de faire, t'as plus qu'à choisir.

  5. #5
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Bonjour à tous et merci pour vos réponses.

    leternel : Sur votre conseil, j'ai recherché comment programmer un thread, et le tutoriel de Franck.h m'a beaucoup aidé. En fait, les temps d'attente utilisateur ne sont rien d'autre qu'un simple minuteur devant indiquer à l'utilisateur combien de temps il lui reste à des instants déterminés.

    dragonjoker59 et Bacelar : Je sais que mon "service" Windows n'en n'est pas vraiment un, mais c'est la seule méthode que je connaissais qui me permette de démarrer mon programme à l'ouverture de session, et de le faire fonctionner en tâche de fond tout en avertissant l'utilisateur de manière ponctuelle ! Par contre, je ne savais pas qu'un service ne pouvait pas afficher d'IHM. Pour l'instant je ne suis qu'à la phase de Debug, donc les messages d'avertissement s'affichent correctement. Je suppose donc que ces messages ne s'afficheront plus quand je mettrai le service en production, ce qui est gênant...

  6. #6
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Je confirme : pas de message d'erreur lors de l'exécution du service, alors qu'ils apparaissent à partir du débogueur... Dommage. J'avais passé pas mal de temps à comprendre l'exécution d'un service...

  7. #7
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    En général, s’il y a besoin d’un service et d’une ihm, on scinde les deux :
    - d’un côté, le service, qui réside dans la session des services windows, sans ihm
    - de l’autre, l’ihm, qui réside dans la session utilisateur, éventuellement, pas toujours lancée au démarrage
    - entre les deux, un mécanisme d’ipc (inter process communication), soit via mémoire partagée, soit via socket locale

    Si la problématique est « juste » le lancement au démarrage, la clé de registre « HKLM/Microsoft/Windows/Run » (de mémoire) devrait suffire, pas nécessairement besoin d’un service.

  8. #8
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Bonjour,

    Merci à white_tentacle pour votre suggestion sur l'IPC. En fait, cette solution va me permettre de résoudre des problèmes dans quelques-uns de mes projets.

    J'utilise un service non seulement parce qu'il est commode de le lancer au démarrage d'une session, mais aussi parce que cela consomme moins de ressources qu'un programme de premier plan.

    Pour citer des exemples de la vie courante, des programmes tels que Skype, Avast, Java Update, AMD Catalyst, etc... démarrent à l'ouverture de session, ne sont pas des programmes de premier plan et envoient des notifications à l'utilisateur. C'est ce genre de programme que j'ai besoin de développer.

    Encore merci à tous pour vos idées !

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par Jimmy91 Voir le message
    Pour citer des exemples de la vie courante, des programmes tels que Skype, Avast, Java Update, AMD Catalyst, etc... démarrent à l'ouverture de session, ne sont pas des programmes de premier plan et envoient des notifications à l'utilisateur. C'est ce genre de programme que j'ai besoin de développer.
    Pour skype, c’est un programme standard qui réside entièrement en session utilisateur. Pour avast, il y a effectivement une interface utilisateur, et un service. Pour amd catalyst, c’est une interface et un pilote, je ne sais plus s’il y a un service au milieu ou si l’interface interagit en direct avec le pilote.

    Globalement, ce qui va faire la différence, c’est surtout une question de droits et d’usages :
    - si tu as besoin des droits systèmes (typiquement, le cas d’avast) alors un service est nécessaire
    - si au contraire, le programme doit résider dans la session utilisateur, et ne pas être partagé entre plusieurs sessions (le cas de skype), alors c’est un programme normal qu’il faut faire
    - si tu as besoin que ça fonctionne alors qu’aucun utilisateur n’est connecté, ce sera un service

    En fonction de tes besoins, tu choisis la solution adaptée.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 170
    Points : 12 290
    Points
    12 290
    Par défaut
    si au contraire, le programme doit résider dans la session utilisateur
    Plein de méthodes, mais la 4 semble plus simple :
    http://www.sevenforums.com/tutorials...ms-change.html

  11. #11
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Bonjour et merci pour vos réponses.

    Finalement white_tentacle a raison, je vais éviter de créer un service et me rabattre sur un "programme normal" car j'ai besoin d'afficher des messages utilisateur. Pour qu'il se lance automatiquement au démarrage, il me suffira d'appliquer l'une des méthodes fournies par bacelar via son lien.

    Enfin, pour afficher la messageBox sans qu'elle ne bloque le processus principal du programme, j'étudie la solution du thread secondaire...

    Encore merci à ceux qui m'ont aidé.

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

Discussions similaires

  1. Personnaliser une message box
    Par nico_pouchet dans le forum Windows Forms
    Réponses: 6
    Dernier message: 25/06/2007, 19h43
  2. afficher une message box a parti d'une console
    Par lermit dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 14/05/2007, 15h18
  3. Formatage d'une message box
    Par Destiny dans le forum Access
    Réponses: 7
    Dernier message: 19/02/2007, 15h05
  4. [C/C++] afficher des doubles dans une message box
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2005, 14h55
  5. afficher une "message box"
    Par requiemforadream dans le forum ASP
    Réponses: 2
    Dernier message: 19/04/2005, 16h11

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