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

Threads & Processus C++ Discussion :

Comment limiter le temps CPU d'une tâche ?


Sujet :

Threads & Processus C++

  1. #1
    Membre habitué

    Inscrit en
    janvier 2006
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 187
    Points : 139
    Points
    139
    Par défaut Comment limiter le temps CPU d'une tâche ?
    Bonjour,
    je bosse sur une appli C++/QT assez lourde et j'ai 2 taches qui mettent un peu plus de 2min chacune au lancement. Ça me fait presque 5min d'attente avant d'avoir l'IHM... Pas bon!
    Ma première tache est "nécessaire" d'avoir fini avant l'ouverture de l'IHM mais la seconde pourrait être faite après quand il y a du CPU dispo.
    Je l'ai donc mis dans un std::thread mais le problème c'est qu'elle me prend 100% du CPU et que mon IHM ne répond pas pendant ce temps... Je retombe sur la même situation qu'au début...

    Bref que me conseillerez vous afin de mettre la tache en arrière plan mais réduire son temps CPU? C'est le remplissage d'un arbre avec des millions d'entrées... Quelques boucles inévitable.

    Le truc auquel je pensais serait de rajouter des sleep mais ça m'embette un peu de crader mon code en les ajoutant sachant qu'il ne faudrait qu'ils soient actifs que si la tache est threadée...
    Une autre idée?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 675
    Points : 30 458
    Points
    30 458
    Billets dans le blog
    4
    Par défaut
    Salut,

    as-tu essayé de diminuer la priorité du thread en question ?
    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.

  3. #3
    Membre habitué

    Inscrit en
    janvier 2006
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 187
    Points : 139
    Points
    139
    Par défaut
    Apparemment ce n'est pas possible via l'API std::thread. Il faudrait le faire en natif...
    Et puis de toute façon même si la priorité était moindre, à mon avis il resterait quand même à 100% car il est dans des boucles et que le thread principal attend une interaction utilisateur donc ne gagnerai jamais la main...

    pour l'instant je teste avec std::this_thread::sleep_for (cf ici), c'est pas très élégant mais tant pis...
    ça compile... je vous dirai si ça marche mais j'aurai préféré une autre solution.

    Peut être que j'utiserai plutot QThread et QTimer... je vais voir...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 675
    Points : 30 458
    Points
    30 458
    Billets dans le blog
    4
    Par défaut
    Il n'y a effectivement pas d'API via std::thread pour ça.
    Tu as une fonction qui peuple un arbre, le seul moyen de ne pas utiliser du cpu serait de ne pas l'appeler. Bien entendu que tu ne sauveras jamais ton CPU tant que le calcul est fait
    Mais en diminuant son affinité, ou en la bougeant sur un autre core, elle gènera moins le main thread et l'application elle-même
    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.

  5. #5
    Membre habitué

    Inscrit en
    janvier 2006
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 187
    Points : 139
    Points
    139
    Par défaut
    bon au final c'est pas très élégant mais j'ai mis ma tache dans un thread et j'utilise des sleep afin qu'il rende la main au thread de l'IHM.
    avec un bon "dosage" (sleep de 2sec tous les ajouts de 1000 éléments dans mon arbre) j'arrive à n'utiliser qu'entre 5% et 15% du CPU.
    j'ai fait ça en QT, cf ici pour ceux que ça intéresse: https://forum.qt.io/topic/70591/how-...s-cpu-usage/12

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2010, 13h14
  2. Réponses: 1
    Dernier message: 17/04/2009, 17h56
  3. Réponses: 3
    Dernier message: 16/08/2007, 03h02
  4. Temps cpu pour une instruction
    Par akiraa dans le forum C++
    Réponses: 10
    Dernier message: 15/08/2007, 02h15
  5. [Thread] Limiter le temps max d'une tâche
    Par be_tnt dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 27/03/2006, 11h59

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