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 :

Interruption et thread


Sujet :

Threads & Processus C++

  1. #1
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut Interruption et thread
    Bonjour,


    Je souhaiterais exécuter un programme pour un temps relativement précis 60s par exemple.

    Dans mon programme je réalise des fonctions longue à calculer, et je souhaite arrêter mon programme même si la fonction n'a pas finis de calculer.

    Je pense donc qu'il faut passer par un thread qui gére le temps mais je sais pas du tout comment procéder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    void delay(){
       sleep(1000*120); //2 min
    }
     
    void main(){
       while(temps < 60s) {
            delay();
       }
    }
    Le problème avec ça il va attendre que la fonction sois finis pour arrêter le programme.


    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    Bonjour,

    Pour arrêter une application, je vois trois possibilités :

    a) un thread dont la callback attend puis simplement arrête tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void *thread_procedure( void * )
    {
       sleep(delai);
       exit(0); 
    }
    et lancement du thread par std::thread(thread_procedure)
    b) on peut aussi programmer un timer dont la callback arrête tout ; pratique pour les cas simples.

    c) il existe aussi les signaux posix (même sous Windows) en une seule ligne
    en appelant directement : unsigned alarm(unsigned seconds);
    qui va envoyer un signal SIGALRM après N secondes (ne pas traiter ce signal provoquera un arrêt de l'application.)

  3. #3
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Merci,

    J'ai fait un peu différemment mais ca marche si ca peut aider du monde


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void *thread_procedure( )
    {
       sleep(90);
       exit(0); 
    }
     
    int main( int argc, char *argv[] ) {
    	thread temps;
    	temps = thread(thread_procedure);
    	while(temps.joinable()){
    		faire un truc :) ;
    	}
    }
    même si le "truc" est pas finis on arrête le programme.


    Mais c'est moche de faire un sleep je mange du processeur inutilement, je suis ouvert à une meilleur solution

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    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 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Oui, c'est très très moche.
    Et j'espère que vous attendez pas à quelques chose de précis.

    un sleep je mange du processeur inutilemen
    Surement pas. Un sleep ne consomme aucun cycle CPU autre que l'appel système.

    Il y a plein de moyen bien plus simple et fiable que ce "machin", mais il faut nous donner plus de détails sur le "pourquoi".

    Demander à un programme de s’auto-controler, c'est compliqué et pas fiable. Si la programme part en sucette, c'est pas avec votre bricolage qu'il s'arrêtera.

    Windows dispose d'un scheduler, profitez s'en, même si c'est pour envoyer un WM_QUIT à une fenêtre, envoyer un SIGNAL à la POSIX, faire du taskill bourrin, en fonction du mode du fonctionnement du programme à manager.

  5. #5
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Le programme et aussi bien sur linux que sur windows pour le moment à long terme il sera embarqué.

    Comment faire ca de façon plus propre bacelar ?

    Merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    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 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Comment faire ca de façon plus propre bacelar ?
    mais il faut nous donner plus de détails sur le "pourquoi" (BIS)

    Le solution est fonction du pourquoi de l'application.

    Le programme et aussi bien sur linux que sur windows
    Comme je dis que ce genre de truc n'a rien à faire dans le programme lui même, on s'en fout un peu.

    En plus, le scheduler existe aussi bien sous Linux que sous Windows.

    à long terme il sera embarqué.
    Je pense qu'un scheduler, c'est jouable, non ?

  7. #7
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    En effet l'arrêt d'une application ou même d'un thread c'est tout une technique.
    Par exemple quand on parle d'embarqué cela peut exclure les threads, et comme le dit bacelar il restera toujours la possibilité d'utiliser un scheduler.

Discussions similaires

  1. Interruption de thread
    Par NoIdea dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 19/03/2014, 13h33
  2. Interruption de thread
    Par adn013 dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 21/08/2007, 09h47
  3. Interruption d'un Thread
    Par doudblast dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 11/03/2006, 17h30
  4. interrupt() de la classe thread
    Par canigu dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 25/12/2005, 14h01
  5. Interruption de thread
    Par bigben89 dans le forum Windows
    Réponses: 2
    Dernier message: 13/10/2005, 10h41

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