Exécution de deux boucle while en même temps

vool - 21 mai 2013 à 17:56
 vool - 24 mai 2013 à 11:04
Bonjour, je suis étudiant en GEII et je suis actuellement en stage.
J'ai un problème dans mon programme.

A un certain moment dans mon programme, je voudrais exécuter deux boucle while en même temps.

While donnee = ""                                                                                       
                                Affiche_reception()
                            End While

                            While donnee = ""                                                                                       
                                If ProgressBar1.Value <> ProgressBar1.Maximum Then
                                    Timer1.Interval = 1000
                                    Timer1.Start()
                                End If
                                Application.DoEvents()
                            End While


Pouvez vous m'aider s'il vous plait

Merci

36 réponses

Utilisateur anonyme
22 mai 2013 à 19:22
Maintenant c'est toujours pareil ==>> aucune précision dans l'exactitude de la valeur du progressbar.

Si tu sur-estimes le temps de traitement du test, ou si l'automate prend plus ou moins long-temps à le faire, pour une raison quelconque, ton progressbar va s'arrêter plus tôt (dès la réception du caractère).

Si tu le sous-estimes, il va rester au maximum et pendant un certain temps ton automate n'a pas fini le test.

C'est donc pour faire "joli" mais on ne peut pas compter sur l'exactitude du progressbar en question...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 mai 2013 à 19:32
A acive :
je parlerais d'utilité réelle, plutôt que d'exactitude, qu'il aura jusqu'à sa limite (le max de sa progressbar).
L'utilisation d'une barre de progression n'a de sens réel que li elle montre la partie effectuée d'un "travail" dont on CONNAIT le volume total (ce qui n'est pas le cas, me semble-t-il).
Lorsque l'on ne connait pas ce volume (et donc le max de la progressbar), on peut :
- soit faire patienter avec une animation (même un sablier)
- soit renseigner (dans un label, par exemple) sur le travail déjà effectué (ce qui a été reçu) et mettre à jour ce label au fur et à mesure de l'évolution de la réception.
Même Microsoft n'utiliserait pas une barre de progression dans le cas ici exposé.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
22 mai 2013 à 19:41
Tout à fait d'accord ucfoutu,
dans son cas précis tout ce dont nous connaissons c'est le temps d’exécution du test (et encore, APPROXIMATIF).

Il suffit que son automate aie besoin de traiter d'autres tâches simultanément, en de hors du test en question, et tu peux être sur que l'estimation n'est pas bonne.

Comme tu dis: autant renseigner un label, point...

Mais ça... ça nous ne concerne pas...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
22 mai 2013 à 20:44
Même Microsoft n'utiliserait pas une barre de progression dans le cas ici exposé.
J'ai déjà vu des barres de progressions Microsoft avancer lentement et se remplir brusquement à la fin
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 mai 2013 à 20:58
Oui, banana32, mais toujours selon le même principe : correction sur la base de :
- ce qu'il y a à faire
- ce qui a été déjà fait
- quelquefois : du constat de vitesse moyenne du travail déjà fait
Ce que tu as ainsi vu est généralement le cas d'une base de progression qui "avance" en fonction du nombre de fichiers traités et non de leur poids.
La barre de progression constate alors ce qu'elle a déjà traité et son max est alors le nombre de fichiers à traiter (pas leur poids).
Mais si tu as un exemple infirmant ce que je dis-là : montre-nous-le (pour voir ...)

Dans le cas ici exposé : on ne connait rien, absolument rien, de ce qui va être reçu !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
22 mai 2013 à 21:08
Bonjour banana32,
se remplir brusquement à la fin

Oui... prend par exemple Microsoft Office à l'installation...
Parce qu'ils prennent en compte le nombre de tâches à accomplir et non la difficulté et/ou le temps nécessaire à l'ensemble des tâches.

D'ailleurs un tel calcul me parait assez difficile compte-tenu du grand nombre de processeurs, ainsi que de la taille des mémoires RAM installées sur la machine.

Tout comme la progression d'un téléchargement de fichiers sur le net, ils se basent sur le débit du serveur et de la bande passante de ta connexion pour t'indiquer qu'il te reste x minutes de téléchargement.

Tiens.. chez moi l'ADSL (bien sur, ça fonctionne à "trois pattes")
Ca m'est arrivé de télécharger un fichier en 10 minutes en journée, ce même fichier met une heure aux heures de pointe quand le réseau est saturé.

Ou encore je le mets à télécharger, je vois "vous en avez pour 3 jours 11 heures", je me dis : "bon, tant-pis j'ai besoin de ce fichier..."
Je vais cueillir quelques manges dans le jardin (15 minutes) et quand je reviens, surprise c'est arrivé déjà...

Comment gérer tout cela sinon?


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 mai 2013 à 21:10
Tu manges quoi, acive ? des manges ? C'est quoi ?
Essaye plutôt les mangues (je te conseille personnellement les Alfonso, moinjs fibreuses et délicieuses).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
22 mai 2013 à 21:12
Ceci prouve que le code du demandeur est mal conçu; c'est ce que je répète sans réaction de sa part depuis deux jours
0
Utilisateur anonyme
22 mai 2013 à 21:16
Salut acive
Comment gérer tout cela sinon?

Tu as une solution ici
0
Utilisateur anonyme
22 mai 2013 à 21:34
Banana,
Oui, mais alors si tu écoutes ce qu'il dit... "il faut commencer par apprivoiser le fruit", franchement, tu crois vraiment que je vais lui courir après, et lui ordonner "VIENS ICI, AU PIED!!!" ???
C'est plutôt lui qui viens à moi... (ou du moins sur ma tête quand il est trop mur)

ucfoutu, désolé...
Alors les Manges, tu ne dois pas connaitre, c'est un fruit local, plus communément appelé "Mange moi vite" car le voisin arrive avec sa fourche...

Au fait, à un moment, je pensais que la ADSL ici voulait dire (en anglais) : Absolutely Depressive System Link... mais bon on s'habitue à tout.



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 07:17
J'ai trouvé et lu ce matin un petit didacticiel qui m'a paru intéressant ===>>
Tapez le texte de l'url ici.
Il vous intéressera aussi, probablement.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 07:46
Et je vous propose aussi cette lecture :
Tapez le texte de l'url ici.
(elle devrait vous "parler" mieux qu'à moi).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Salut Acive

Ce que tu m'a proposé est intéressant mais le problème est que la fonction DonnéesRecuesDeLAutomate() comme tu la appeler je dois l'appelé dans button1_click tant que je n'est pas recu le caractère.

    
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim NbreDeSecQuiDureLeTest As Integer = 10 'Le test dure 10 sec
        SerialPort1.Write("?") 'démarrage du test
        ProgressBar1.Maximum = NbreDeSecQuiDureLeTest
        ProgressBar1.Value = 0
        Timer1.Interval = 1000
        Timer1.Enabled = True
    End Sub

    'Juste un exemple d'une sub car je ne sais pas comment tu reçois ce caractère:
    Private Sub DonnéesRecuesDeLAutomate()
        If Caractere "fin" Then ProgressBar1.Value ProgressBar1.Maximum
        'et tu peux même laisser tourner le timer
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If ProgressBar1.Value < ProgressBar1.Maximum Then ProgressBar1.Value += 1
    End Sub
0
    
Public Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived                           'Fonction permettant de lire sur le port RS232
    Me.Invoke(New EventHandler(AddressOf Affiche_reception))
End Sub

Public Sub Affiche_reception()               'Fonction permettant de récupérer ce qui est lu sur le port RS232                                                                         
    donnee = RS232.ReadExisting
End Sub



Je dois appelé ma fonction Affiche_réception() tant que je n'est pas recu le caractère
0
Utilisateur anonyme
23 mai 2013 à 15:20
D'accord, mais tu as bien lu nos avis concernant ta gestion de ton progressbar ainsi que son utilité nulle?

Mais si tu veux en mettre un pour faire plus joli, vas y.
C'est bien d'avoir mis une sub Affiche_réception qui est appelé par la réception d'un caractère, mais je crois que tu n'as pas bien géré la chaîne reçue en général n'importe quel automate renvoi également un retour de chariot comme un Chr(13), un Chr(10) ou les deux.
Essaye comme ça, (j'ai mis une attente de 100 millisecondes, et je vérifie si la chaine reçue contient ton caractère de "fin):
Option Strict On
Public Class Form1
    Dim NbreDeSecQuiDureLeTest As Integer = 10 'Le test dure 10 sec
    Dim TimerCom As New Timer
    Dim DonnéeReçue As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RS232.Write("?") '"?" = caractère de démarrage du test
        ProgressBar1.Maximum = NbreDeSecQuiDureLeTest
        ProgressBar1.Value = 0
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        'ici il faut fermer le port
        If RS232.IsOpen Then RS232.Close()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 1000
        Timer1.Enabled = True
        TimerCom.Interval = 100
        TimerCom.Enabled = False
        AddHandler TimerCom.Tick, AddressOf TimerCom_Tick

        'ici il faut parametrer et ouvrir le port
        RS232.BaudRate = 9600
        RS232.StopBits = CType(1, IO.Ports.StopBits)
        RS232.Parity = IO.Ports.Parity.None
        RS232.PortName = "COM1"
        If RS232.IsOpen = False Then RS232.Open()
    End Sub

    Private Sub TimerCom_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        DonnéeReçue = RS232.ReadExisting
        If DonnéeReçue.Contains("-") Then '("-" = caractère qui signifie la fin)
            ProgressBar1.Value = ProgressBar1.Maximum
        End If
        TimerCom.Enabled = False
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If ProgressBar1.Value < ProgressBar1.Maximum Then ProgressBar1.Value += 1
    End Sub

    Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
        TimerCom.Enabled = True
    End Sub
End Class



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Merci Acive.
0
Rejoignez-nous