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

VB.NET Discussion :

démarage timer via thread? [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut démarage timer via thread?
    bonjour à tous,

    j'essaye de démarrer un timer dans un thread mais celui-ci ne veut pas
    pourtant le même code en dehors du thread (via un bouton par exemple) fonctionne

    donc comment faire pour démarrer le timer dans un thread?

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        Dim thread_test As New Thread(AddressOf test)
     
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            thread_test.Start()
        End Sub
     
       Private Sub test()
            Do
                ' boucle infinie de fonctionnement
                Timer_1.Enabled = True
                Timer_1.Start()
     
                Thread.Sleep(10)
     
            Loop
     
        End Sub
     
        Private Sub Timer_1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer_1.Tick
            compteur = compteur + 1
            Label2.Text = compteur
            Application.DoEvents()
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Timer_1.Enabled = True
            Timer_1.Start()
     
        End Sub

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Bonjour, bonnes fêtes,

    Je ne vois pas trop un intérêt à démarrer un Timer dans un autre thread mai j'ai vu System.Threading.Timer chez msdn je me demande si ça peut te servir...
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    hello,

    joyeuse fête également

    en fait, j'ai exposé simplement mon problème mais le programme est beaucoup plus complexe

    je travaille en multi-tache avec un thread qui tourne en tache de fond et qui recupère des données via le port USB ainsi que l'affichage de ceux-ci

    j'ai besoin de faire un autre thread qui en fonction des données fait certaines tache etc...
    dans ce thread, j'ai par exemple besoin de savoir combien de temps une variable est à une valeur (je précise que toutes les variables sont globales et donc accessible partout)

    d'où le besoin de démarrer un timer via un thread

    dans mon exemple ci-dessus, j'ai mis un intervale de 100ms et un compteur
    une fois que j'arriverai à démarrer le timer via le thread, je pourrais tester mon compteur pour connaitre la durée...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Oui!... tu as raison, tu gères une carte électronique et tu poses les questions et attends les réponses sur un autre thread (par exemple pour lire des états des entrées)???

    Hé bien je suis dessus aussi, par contre moi c'est par wifi, mais c'est pareil.
    d'ici demain je te montrerais ce que j'ai fait
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    bonjour,

    oui le principe général est là, je récupére l'état de mes cartes dans un thread
    et j'aimerai faire les actions suivant les états dans un autre thread pour ne pas bloqué le CPU à rien

    car j'ai essayé de mettre ma boucle dans le "main" ... le CPU se bloque à 100% d'utilisation et le reste du programme se fige ou est très fortement ralenti -> d'où mon idée d'utiliser un autre thread

    comme Timer est un threa, je vais voir s'il n'y a pas un moyen de démarrer un thread via un autre thread

    ça doit bien exister

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    bon bin j'ai trouvé tout seul comme un grand

    un simple Application.Doevents() permet de résoudre le soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        Dim thread_test As New Thread(AddressOf test)
     
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            thread_test.Start()
        End Sub
     
       Private Sub test()
            Do
                ' boucle infinie de fonctionnement
                Timer_1.Enabled = True
                Timer_1.Start()
     
            Application.DoEvents()
     
                Thread.Sleep(10)
     
            Loop
     
        End Sub
     
        Private Sub Timer_1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer_1.Tick
            compteur = compteur + 1
            Label2.Text = compteur
            Application.DoEvents()
        End Sub
    ensuite se pose le problème de Cross-thread pour l'affichage de la valeur dans Label2
    pas grave, on invoque un delegate et tout roule

    parfois on cherche compliquer alors que c'est finalement simple

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Points : 359
    Points
    359
    Par défaut
    Re:
    Je ne vois pas pourquoi tu fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Do
                ' boucle infinie de fonctionnement
                Timer_1.Enabled = True
                Timer_1.Start()
     
            Application.DoEvents()
     
                Thread.Sleep(10)
     
            Loop
    le "timer1.enabled = true" tu le fais qu'une seule fois pas dans une boucle
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    héhé

    comme dit précédemment, j'ai simplifié mon problème au maximum

    mais effectivement dans ma boucle, je n'ai besoin de le faire qu'une seule fois
    je pourrais meme l'activer en "générale" et ensuite jouer avec le start & stop , ça doit revenir au même

    mon seul soucis était que l'événement Tick n'intervenait jamais

    maintenant avec le Doevent, le timer fonctionne correctement, et le reste du programme commence à prendre forme

    merci à toi d'avoir pris un peu de ton temps à m'aider

    ps : j'ai fait laissé en laissant l'activation du timer dans la boucle, ça ne change rien et ça compte bien comme il faut

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

Discussions similaires

  1. [TJvTimer] Timer JVCL thread
    Par dvarrel dans le forum Composants VCL
    Réponses: 1
    Dernier message: 14/08/2008, 22h35
  2. JavaME : Timer et thread graphique
    Par ®om dans le forum Java ME
    Réponses: 5
    Dernier message: 31/01/2008, 15h31
  3. Actualisation périodique : timer ou thread ?
    Par Shredder dans le forum Langage
    Réponses: 12
    Dernier message: 02/11/2007, 08h52
  4. Un timer ? Plein de Timer ? un thread de control ?
    Par vincedom dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 12/06/2006, 13h18
  5. [MFC] Cherche Timer avec thread
    Par romeo9423 dans le forum MFC
    Réponses: 17
    Dernier message: 09/03/2005, 10h33

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