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 :

mettre un programme en pause


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut mettre un programme en pause
    c'est surement un probleme recurrent, mais une petite recherche, si elle m'a donné des indications, n'a pas repondu a toutes mes questions :

    je developpe une appli de calcul scientifique un poil violente ( record de temps de calcul a plus de 4 jours.. ). vu qu'on a pas mal de données a traiter, l'idee serait de pouvoir mettre le programme en pause.. comme ca on l'installe sur tous les ordis des collegues, il le mette en pause le matin, le "depause" le soir et roulez jeunesse.

    donc je suppose qu'il faut utiliser du multithreading : un pour le programme, un qui attend l'appui d'une touche.

    le hic : je programme sous linux, et le programme va tourner sous windowS. et j'essaie de reduire au maximum les dependances de mon prog ( pour l'instant c'est du C++ pur), mais quelquechose me dit que je vais etre obligé de faire appel a une librairie si je veux du multiplateforme.. ( ou ya t il du multithread dans le C "standard" ?? )

    voila, si quelqu'un pouvait me donner quelque indications, me conseiller une librairie simple et facilement installable sous linux/windows et me donner vite fait la marche a suivre (je connais les concepts generaux du multithread, mais je n'en ai jamais fait, et j'aimerais faire quelque chose de "propre" !!)

    merci d'avance !!

  2. #2
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Ce genre de pause n'est pas tres robuste (arret machine involontaire ou plantage de l'ordi par un autre soft par exemple) et le process va s'en cesse demander si il doir reprendre.

    Bref, je te conseille plutot une sauvegarde depuis n'importe (facon de parler) qu'elle endroit de ton soft sur le disque dur et un processus de reprise au redemarrage.
    Avant de poser une question, lire la Avant de répondre, lire la question

  3. #3
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Plutôt que de mettre en pause le programme, tu pourrais le passer en priorité minimale le matin (avec la commande nice sous Linux, je ne sais pas sous Windows, mais ça doit se trouver) et réaugmenter sa priorité le soir.
    Comme ça, il profitera en plus des temps d'inactivité des machines dans la journée.

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    pour la sauvegarde : oui, ca serait plus judicieux. mais ca n'empeche pas que je doive attendre une touche pour interrmopre le prgramme et sauver les données.. donc re multithread !

    pour le nice : oui, je connais, mais :

    - sur mon ordi a moi ( un portable ) nice n'empeche pas de chauffer, ca finit par faire ramer l'ordi de toute facon.
    - nice n'existe pas sous windows.

    par contre, je suppose qu'il doit y avoir des commandes C++ pour modifier la priorité du programme, ca ca pourrait etre sympa ( faire un truc comme les seti@home et autre ) mais la par contre je ne sais pas du tout quelle est la marche a suivre !

  5. #5
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Citation Envoyé par jobherzt
    par contre, je suppose qu'il doit y avoir des commandes C++ pour modifier la priorité du programme
    Tu auras du mal à faire du standard puisque ça s'appuie sur des mécanismes système, que ce soit la gestion de priorité ou la suspension d'un thread.
    La seule façon que je vois de faire du portable, c'est de développer avec les threads POSIX, qui peuvent aussi tourner sous Windows (ça, je n'ai jamais fait sous Windows, mais tu trouveras facilement l'info).

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    Citation Envoyé par joellel
    Tu auras du mal à faire du standard puisque ça s'appuie sur des mécanismes système, que ce soit la gestion de priorité ou la suspension d'un thread.
    c'est ce qui me semblait.. je pense que je vais retenir la gestion de priorité "a la main", ou avec un fichier batch..

    merci bien !!

  7. #7
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    Je vois plusieurs solutions :
    1 - je présume que ton appli doit avoir une boucle principale...
    tu pourrais essayer d'y caler une instruction Sleep() par exemple, c'est une façon peu élégante (mais très simple) de rendre un processus peu gourmand.
    2 - tu lances ton calcul dans un thread créé à partir du thread principale, et lors de la création du thread de calcul, tu lui spécifies la priorité relative inférieure basse.

    D'autres solutions éxistent encore, mais il faut que tu donnes plus de renseignements sur tes contraintes : protabilité, graphique/console, OS, etc...

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    la portabilité doit etre totale (windows/linux) vu que je n'ai pas de machine sous windows.

    tout se fait en console.. le coup du sleep, effectivement c'est bourrin.. mais ca peut etre une idee !! meme si le coup de creer un batch qui lance le prog en priorite basse devrait suffire, je pense !

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Un système d'exploitation de qualité tel que linux te permet de mettre n'importe quel processus en pause.
    Boost ftw

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Tu as des bibliothèques portables pour gérer des threads.
    Après il faut voir si il y a un moyen d'envoyer des signaux de façon portable à un processus.
    ACE devrait proposer les deux choses. Bien que je n'ai pas vérifié la gestion des signaux sur windows. A vérifier donc.

    Avec tout cela il devient aisé de mettre en place une interception de signaux qui va mettre à jour un flag qui servira à mettre en veille les calculs. Avec un autre signal on peut alors relancer le thread de calcul.

    Ce qui n'empêche pas de sauver le contexte sur disque en cas de plus grosse difficulté ou même juste comme une sécurité.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    il faudrait faire ton programme de calcul en tant que server, les calculs a part du thread principal et un autre qui accepterait les sokets d'un client de configuration.

    J'imaginerais bien une interface de configuration qui demanderait de stopper et sauvegarder tes calculs, idem pour relancer/recharger une sauvegarde.

    peut-etre pense a Qt, simple et portable.

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    lol ! merci, mais je pense que ce serait un poil disproportionné !! pratique, certes, et interressant a programmeR. mais pour l'instant, le code est en pur C++, je bosse sous linux, je l'envoie par mail a des gens qui sont sous windows, qui habitent a 200 bornes de chez moi, qui n'y connaissent rien en programmation et qui doivent le compiler sous dev cpp... donc je prefere m'en tenir au minimu question fioritures autour.. un systeme de sauvegarde me semblerait sympa, mais ca risque d'etre lourd a mettre en place actuellement..

    je leur ai suggéré la solution simple de baisser la priorité du processus, et apparemment ca suffit, ne tentons pas le diable :-) !!

    merci a tous pour vos suggestions !

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    un client / server n'est pas dur a programmer surtout avec Qt.
    et aussi meme des non informaticiens peuvent lancer un client server

    ... comme tu veux

    a+

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    au fait Qt est multiplateforme
    donc pas de probleme pour ton linux, et si tu es sur KDE,
    il y a KDevelop qui est vraiment cool

  15. #15
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    merci, je connais un peu Qt, mais ca cree une dependance pour mon programme alors qu'il n'en a pas pour l'instant, et ca complique les explications que je dois leur fournir pour l compilation.. pour un benefice pas forcement a la heuteur des efforts !!

    si deja le programme calcule ce qu'il est censé calculer ( c'est pas gagné, c'est du bourrin.. ) on sera content !!

    mais merci pour les tuyaux, ca viendra peut etre dans un deuxieme temps.

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    ... comme tu veux

    juste par curiosité, ton programme calcule quoi ?

    a+

  17. #17
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    pour faire simple, c'est de la modelisation de donnée.. on a un ensemble de mesure, et on trouve la courbe qui passe au plus pres des points. sauf qu'on a un tres grand nombre de parametres, qu'il y a plusieurs phenomenes simultanés et en nombre inconnu, que les mesures sont des nombres complexe, et que les modeles sont fortement symétriques, autant dire que l'approximation au sens des moindres carrés se casse les dents completement. ( mais alors, completement !! en lui donnant les valeurs exactes de 90% des parametres, dans un cas simple et avec de bonnes valeurs initiales, ca foire quand meme.. )

    donc on sort un peu l'artillerie lourde, du coup c'est un programme un peu specialisé..

    pour rentrer dans le detail je devrais rentrer dans des trucs un peu techniques, et puis c'est l'arme secrete, ce programme, donc motus

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

Discussions similaires

  1. Fenêtre tk active sans mettre le programme en pause
    Par nikaulas dans le forum Général Python
    Réponses: 5
    Dernier message: 08/01/2014, 12h04
  2. mettre un programme en pause
    Par Mydriaze dans le forum Général Python
    Réponses: 5
    Dernier message: 23/11/2012, 14h00
  3. [NASM] Mettre le programme en pause - boucle infinie
    Par Voitures007 dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 19/12/2010, 17h59
  4. Mettre le programme en pause en attendant un événement
    Par bigboss39 dans le forum Tkinter
    Réponses: 1
    Dernier message: 08/04/2009, 15h10
  5. Programmer une pause brève
    Par NeoMan dans le forum Assembleur
    Réponses: 14
    Dernier message: 28/04/2003, 01h59

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