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 :

Programme en tâche de fond


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut Programme en tâche de fond
    Bonjour,

    j'aimerai savoir vers quoi m'orienter pour créer un programme C++ qui tourne en tâche de fond?

    Je précise que mes aptitudes ne sont pas des plus avancées en C++, je maitrise les bases et j'ai des connaissances sur la libraire Qt.

    Merci d'avance de vos réponses.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Faire tourner un programme en tâche de fond ne relève pas vraiment du programme en lui même. Tu l'écris, et ensuite, tu te débrouilles avec ton OS pour que celui-ci le lance en tâche de fond. A priori, n'importe quel exécutable qui ne demande pas d'interaction avec l'utilisateur de la machine peut tourner en tâche de fond.
    Find me on github

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse.

    Ma question devient donc, comment créer un programme qui peut se débrouiller avec l'OS pour qu'il lance l'appli en tache de fond?

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    En théorie c'est simple: c'est pareil que n'importe quel autre programme sauf qu'il y aura dedans une boucle while infinie.
    En pratique - et c'est tout aussi simple - ça va dépendre de ce que tu entend exactement par "en tache de fond" et de ton système d'exploitation.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    En fait il faut que j'analyse l'état des fichiers. A chaque modification je dois réagir.
    Ce que je veux dire par tâche de fond, c'est qu'il doit tourner tout le temps sans qu'il soit visible, ou presque, comme un antivirus par exemple.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Points : 59
    Points
    59
    Par défaut
    Si ce que tu veux faire c'est un daemon, sous un systeme Posix, le principe c'est : tu forks et tu tues le pere.
    Mais ça ne suffit pas, cf ça et ça.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour ces infos, je vais me pencher la dessus.
    Bien que mon incompréhension sur ce que tu viens de me dire me fais un peu flipper... Bref, on verra bien...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    J'ai essayé de potasser tout ça, et j'ai une question, peut-être bidon mais bon...(je suis meilleur en rimes quand informatique...)

    Je crée ce programme sous Windows et si j'ai bien compris, ça veut dire pas de fork ou je me trompe?

    Et si je ne me trompe pas, il faut mieux que j'utilise quoi, createProcess ou les threads?

  9. #9
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Bloorp Voir le message
    Je crée ce programme sous Windows et si j'ai bien compris, ça veut dire pas de fork ou je me trompe?
    Effectivement, pas de fork sous Windows.

    Citation Envoyé par Bloorp Voir le message
    Et si je ne me trompe pas, il faut mieux que j'utilise quoi, createProcess ou les threads?
    Pour démon tout simple, ni l'un ni l'autre.
    Pour commencer, fais jste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    main()
    {
        while (true)
        {
            // faire ce qu'il y a à faire ici
        }
        return 0;
    }
    Si tu souhaites cacher la console, et que tu es sous visual, il faut ajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour cette réponse r0d.

    J'hésite entre être blasé d'avoir cherché si longtemps pour cette réponse ou me sentir bête de pas avoir pensé à faire ça...

    La question sort du contexte mais quel est l'avantage des forks, createProcess et autres threads alors?

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello

    Je me permet de tempérer la réponse de r0d, parce qu'un while(true) risque d'être très gourmand surtout s'il surveille la liste des fichiers ! En général, le processus est plutôt mis en attente jusqu'à ce qu'il reçoive un évènement.

    Bloorp, je pense que ceci devrait t'intéresser.
    Find me on github

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Justement je revenais sur le forum après avoir testé la méthode de r0d car en effet le while devient vite gourmand.

    Je vais regarder de plus près ton lien mais j'ai l'impression que ça va bien m'intéresser.
    Merci jblecanard.

  13. #13
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    M'enfin, pourquoi faire compliqué quand on peut faire simple?
    Un simple sleep dans la boucle suffit.
    Bon après ça va dépendre des contraintes. Si ton programme doit être intégré dans les outils de surveillance d'une centrale nucléaire ou d'un flux Euronext, c'est sûr qu'il faudra chercher des solutions plus safes, mais ça m'étonnerais que l'on soit ici dans ce cas de figure.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par r0d Voir le message
    M'enfin, pourquoi faire compliqué quand on peut faire simple? Un simple sleep dans la boucle suffit.
    Oui et non car l'usage de sleep fait perdre en réactivité... mais bon tout dépend du but et des usages en effet. Si c'est destiné à tourner en permanence, autant que ça soit le plus propre possible et le plus discret possible en terme de ressources.
    Find me on github

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Le programme est en effet censé tourner en continue, du lancement de la machine à son arrêt.
    Comme je disais plus tôt, comme un antivirus.

    Donc je sais pas quelle solution semble la plus adaptée pour vous?
    De mon côté je bosse toutes vos solutions.

  16. #16
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Pas bien de traquer ses employés
    La solution qui me parait la meilleur est celle de jblecanard (le lien qu'il donne). Cette technique met en oeuvre une attente passive, c'est vraiment pas gourmand et assez réactif (pas autant que l'attente active mais ça c'est vraiment vraiment très gourmand, le pc devient peu utilisable pour d'autres applications, ou sinon faut mettre un sleep mais du coup on perd l'avantage de la réactivité). Donc il faut que tu ajoute tes fonctions persos au file system event handler et puis que tu bloque ton processus (j'imagine que le event handler tourne dans un thread du système) jusqu'à ce que tu reçois un signal pour arrêter l'application, ou bien tu ne met pas de conditions d'arrêt.

Discussions similaires

  1. Lancer un programme en tâche de fond sous Windows
    Par FabaCoeur dans le forum Windows
    Réponses: 5
    Dernier message: 15/10/2009, 17h11
  2. exécuter un programme en Tâche de fond
    Par glasgow dans le forum Langage
    Réponses: 4
    Dernier message: 30/04/2009, 15h21
  3. Réponses: 5
    Dernier message: 05/02/2009, 13h01
  4. Programme invisible en tâche de fond
    Par probo dans le forum Delphi
    Réponses: 3
    Dernier message: 08/02/2007, 11h23
  5. executable en "tâche de fond"
    Par jaquet_vincent dans le forum Windows
    Réponses: 5
    Dernier message: 22/10/2004, 14h49

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