Pb thread/timer/doevents VB6

ubuntuflo Messages postés 5 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 3 août 2011 - 2 août 2011 à 14:22
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 4 août 2011 à 00:50
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

ubuntuflo Messages postés 5 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 3 août 2011
2 août 2011 à 14:27
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
2 août 2011 à 21:37
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
0
ubuntuflo Messages postés 5 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 3 août 2011
2 août 2011 à 22:02
Tu as toute la source du projet avec le lien pour télécharger le projet
0
ubuntuflo Messages postés 5 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 3 août 2011
3 août 2011 à 08:48
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 août 2011 à 20:00
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
0
ubuntuflo Messages postés 5 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 3 août 2011
3 août 2011 à 22:27
Merci pour cette info
Y a t'il un moyen pour contourner ca ?
La je suis bloqué... Passer en .net peut il aider ?
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
4 août 2011 à 00:50
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
0
Rejoignez-nous