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 :

Timer sur une tâche en C


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Timer sur une tâche en C
    Bonjour,
    Je souhaite réaliser un script qui permet de faire la tache pendant x secondes. en fait, la tache bloque des fois et je veux l'arrêter après un certain temps et sortir avec un message d'erreur.
    J'ai cherché sur google des solutions, mais toutes ne marchent pas quand la tache bloque ou passe trop de temps à s'exécuter.
    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Ça dépend essentiellement du système d'exploitation que tu utilises et du langage dans lequel tu écris ton programme. Si c'est en C, le plus simple aujourd'hui consiste à lancer un thread indépendant du fil qui doit exécuter ta tâche, lui faire faire un sleep(n) et tuer l'autre thread à la fin de cette durée si l'autre ne l'a pas fait avant.

    Si tu veux éviter les threads, sous Unix, tu peux également utiliser alarm() pour que le système t'envoie un signal après une temporisation donnée.

    Le plus propre, en revanche, consiste à se pencher sur la tâche en question : il y a de fortes chances pour qu'elle soit, d'une manière ou d'une autre, dotée d'un système de timeout qui lui permette de se terminer d'elle-même à l'échéance.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse. Je suis sous Windows.
    La tache en question contient des fois une boucle infinie, c'est pour ça que je veux l'arrêter après un certain temps.
    Je vais me pencher sur les threads

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Si c'est un boucle infinie que tu as écrite toi, alors il faut modifier la boucle, et pas lancer pas un thread extérieur.

    Utilise time(), par exemple, pour connaître la date avant l'entrée dans ta boucle. Ajoute-lui la durée de vie que tu veux lui accorder et rappelle time() dans ta boucle. Tu sors dès que la valeur renvoyée dépasse celle que tu as calculée au départ.

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    La terminaison asynchrone des threads est quelque chose boure de problemes conceptuels importants, au point que ca n'a pas ete normalise en C++11 et en C11 meme si les OS proposent generalement quelque chose (mais bien voir quoi, si j'ai bonne memoire, une boucle de calcul pur n'est pas terminable comme ca avec Posix, il faut arriver a un point de terminaison et ceux-ci sont en gros les appels systemes).

    Ce qu'on fait habituellement, c'est tester periodiquement une variable atomique disant que la thread doit s'arreter..
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. [jBPM] timer sur une action
    Par Air P-E dans le forum Wildfly/JBoss
    Réponses: 8
    Dernier message: 20/07/2010, 11h20
  2. [PR-2007] Suivi des modifications sur une tâche via userform
    Par metmtl dans le forum VBA Project
    Réponses: 0
    Dernier message: 03/03/2010, 11h01
  3. [JVM] Taille de la VM sur une tâche Ant
    Par Gueritarish dans le forum ANT
    Réponses: 0
    Dernier message: 16/12/2008, 11h11
  4. Timer sur une fenetre "info"
    Par momobulle dans le forum WinDev
    Réponses: 2
    Dernier message: 11/07/2007, 13h26

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