Pb thread/timer/doevents VB6

Signaler
Messages postés
5
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
3 août 2011
-
Messages postés
14672
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2020
-
Bonjour,

Après 3 tentatives et 3 techniques différentes, je m'en remets à vous !
Merci par avance!

Pour faire simple
j'ai besoin de synchroniser et désynchroniser certains de mes evenements sur VB6

Pour tester, j'ai
- bouton n°1
fonction souhaitée :
pause_1 pendant quelques secondes (timer_1 +doevents_1)
faire qqch_1
pause_1 pendant quelques secondes (timer_1 +doevents_1)
faire qqch_1
- bouton n°2
fonction souhaitée :
pause_2 pendant quelques secondes (timer_2 +doevents_2)
faire qqch_2
pause_2 pendant quelques secondes (timer_2 +doevents_2)
faire qqch_2

Lorsque le code est exécuté :
cas1 : on appuie sur "1"
RAS
cas2 : on appuie sur "2"
RAS
cas3 : on appuie sur "1" puis rapidement sur 2
(je veux que les 2 actions se fassent en parallèle)
pause_1 pendant quelques secondes (timer_1 +doevents_1)
pause_2 pendant quelques secondes (timer_2 +doevents_2)
faire qqch_2
pause_2 pendant quelques secondes (timer_2 +doevents_2)
faire qqch_2
faire qqch_1
pause_1 pendant quelques secondes (timer_1 +doevents_1)
faire qqch_1

-> les actions 2 ne laissent pas le timer_1 +doevents_1 sortir de sa boucle pour effectuer qqch_1 en parallèle ...

Est ce que quelqu'un peut jeter un œil à mon Pb ? Merci encore

lien fichier projet
mot de passe : ubuntuflo

7 réponses

Messages postés
5
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
3 août 2011

PS :
pour comprendre :
- pause_1 est visible via un compteur 0->450
- faire qqch_1 : remise à Zero du compteur

- pause_2 est visible via un compteur 0->450
- faire qqch_1 : remise à Zero du compteur
Messages postés
14672
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2020
143
Bonjour,

Tu peux fournir un vrai code, car ton sujet est très peu explicite comme ça (voir ma signature).

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
5
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
3 août 2011

Tu as toute la source du projet avec le lien pour télécharger le projet
Messages postés
5
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
3 août 2011

Je peux mettre le code si tu veux mais cela risque de faire beaucoup, c'est pourquoi un zip du projet complet est disponible.

Pour expliquer autrement, mon problème :
je souhaite pouvoir lancer des actions en parallèle tout en pouvant les temporiser.

    Private Sub Command1_Click()
Dim tempoo As Integer
    i1 = 0
    Text1.Text = 0
    Bt_LancerThread_Click 'juste un timer qui incremente i1
    While (Val(Text1.Text) < 450)'Text1.Text=i1 , i1 incréménté par le thread lancé
         DoEvents
    Wend
    Bt_TerminerThread_Click

    i1 = 0
    Text1.Text = 0
    Bt_LancerThread_Click
    While (Val(Text1.Text) < 450)'Text1.Text=i1 , i1 incréménté par le thread lancé
        DoEvents
    Wend
    Bt_TerminerThread_Click
End Sub

Private Sub Command2_Click()
Dim tempoo As Integer
    i2 = 0
    Text2.Text = 0
    Bt_LancerThread2_Click 'juste un timer qui incremente i2
    While (Val(Text2.Text) < 450)'Text2.Text=i2 , i2 incréménté par le thread lancé
        DoEvents
    Wend
    Bt_TerminerThread2_Click

    i2 = 0
    Text2.Text = 0
    Bt_LancerThread2_Click
    While (Val(Text2.Text) < 450) 'Text2.Text=i2 , i2 incréménté par le thread lancé
        DoEvents
    Wend
    Bt_TerminerThread2_Click
End Sub


Il me semble que lorque lorsque Command1_Click puis Command2_Click sont lancés quasi en même temps, la condition de sortie de la boucle "while" de Command1_Click n'est plus testée (Text1.Text est largement > 450)


Est ce que cela est claire ?
Comment pouvoir effectuer ces 2 fonctions Command1_Click et Command2_Click en parallèle (donc des tempos en parallèle bien désynchronisée)
Messages postés
14672
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2020
143
Bonjour,

J'ai déplacé le sujet dans la partie VB6, fais attention à la catégorie la prochaine fois.

en VB6, on ne fonctionne qque par pile, donc si Timer1 a lancé une opération et que Timer2 se lance après, si Timer2 attends la fin de Timer1, il attendra longtemps car Timer2 a été lancé après Timer1, donc tant que Timer2 n'est pas terminé, Timer1 ne continuera pas.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
5
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
3 août 2011

Merci pour cette info
Y a t'il un moyen pour contourner ca ?
La je suis bloqué... Passer en .net peut il aider ?
Messages postés
14672
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2020
143
Bonjour,

En .NET, tu as de vrais Threads, donc oui, ça résolvera ton problème (enfin en partie, reste à savoir comment tu va l'implémenter). Mais VB6 et VB.NET sont très différents, seul la syntaxe se ressemble.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site