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 :

Thread et Timer


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Thread et Timer
    Bonjour,

    j'ai un service windows qui lance 4 Thread.... Ok

    Dans mes threads j'ai instancié l'objet System.Timer... qui me permet de relancer une méthode tous les x temps .... ok

    Mais alors quand je veux controler mes Threads , c'est-à-dire savoir leur état de fonctionnement pour les couper ou les relancer là j'ai un soucis car le ThreaState indique Stopped et ISALIVE me retourne False alors que le thread tourne car il écrit dans un fichier de log donc il est en fonction .? c est sûr.

    J'ai supprimé le timer et là plus de problème j'ai accès à mes threads peux interagir avec et ISALIVE me retourne bien true et ThreadState me retourne joins sleep ...

    Je me dis que le thread est sûrement dû au timer dans un etat .??? .??? mais je n'ai plus la main dessus si j'ai le system.timer

    Quelqu'un aurait-il une idée ou dèjà rencontré ce problème ?

    merci à vous

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le timer démarre un thread, donc ton thread à toi s'arrete c'est l'autre (celui du timer) qui continue pour appeler ton event quand nécessaire

    mais si tu as un thread, pas besoin de timer, vu que le timer utilise un thread
    (code vb.net)
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while true
      try
         system.threading.thread.sleep(500)
         'code
       catch ex as exception
         'gestion erreur
       end try
    end while

    si tu veux par contre un lapse de temps de démarrage fixe (plutot qu'un temps d'attente fixe) il faut utiliser en plus un chrono pour sleep (max(total-durée,0))
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Comme indiqué par Pol63, tes threads démarrent un timer, puis s'arrêtent. En fait, ils ne servent à rien du tout : tu n'as pas besoin d'un nouveau thread si c'est juste pour créer un timer. Pour arrêter le traitement périodique, il suffit d'arrête le timer.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    bonjour,

    Merci pour vos réponses, alors oui j avais remplacer les timers par des while(true) { ThreadSleep(1000) }

    Je me doutais bien que le Thread en fait est stopper continuellement et qu'il est dans le handle du timer, sauf qd il s actionne pour vérifier l 'état d'une variable donc très peu de nano second pour que je tombe sur un ISALIVE a true .... voir jamais .;-) .


    Sinon en faite j'ai du refaire un programme existant qui etait en VB6 .... donc j'ai a la base refais avec exactitude le meme ..... mais je vais devoir chager des choses

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    non ton thread n'est pas isalive de temps en temps, ton thread s'arrete et c'est un autre thread (du timer) auquel tu n'as pas accès qui est en route
    un thread qui s'arrête de redémarre jamais
    (j'espère qu'on ne devra pas l'écrire une 4ème fois ^^)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui Oui , excuse moi je m exprime mal .... mais bien en attente , j avais bien compris ...

    merci a vous ...

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    non non, ton thread (le tiens) est totalement détruit rapidement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    Réponses: 3
    Dernier message: 04/07/2003, 10h44
  2. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  3. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

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