toytoy190
Messages postés3Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention16 août 2010
-
16 août 2010 à 08:15
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
17 août 2010 à 07:57
Bonjour,
Je suis en train de créer un programme qui envoi des commandes sur le port com par l'intermediare d'une boucle while, jusque la pas de probleme.
Je voudrais pouvoir controler le lancement et l'arret, pour cela j'ai crée 2 commandbox Start et Stop.
Le problème est que je ne peut pas stopper la boucle car le sleep me bloque mon form...
Avez vous une solution a ce problème ?
Mon code :
Public Sub CommandSTART_Click()
arret = False
i = 1
Do While i < 10000
'
moteurCOM
'
If arret = True Then
Exit Do
End If
i = i + 1
DoEvents
Loop
Public Sub moteurCOM()
If Not com.PortOpen Then 'Ouvre le port s'il n'est pas encore ouvert
com.PortOpen = True
If Err Then Exit Sub
End If
com.Output = "en" 'commande a envoyer
Sleep 30000 'Pause
com.PortOpen = False
End Sub
Public Sub CommandSTOP_Click()
'Ferme le port s'il est ouvert
arret = True
If Tel.PortOpen Then
Tel.PortOpen = False
End If
'
reinit
CommandSTART.Enabled = True
CommandSTOP.Enabled = False
cancel:
End Sub
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 16 août 2010 à 08:30
Salut,
Au lieu de faire un gros sleep qui te bloque l'exécution pendant 30 secondes, fais-en plusieurs plus petits, par exemple :
For i = 0 to 30
Sleep 1000 'pause d'une seconde
If arret Then 'prévoit un échappatoire pour quitter la boucle si nécessaire
Exit Do
End If
next i
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
toytoy190
Messages postés3Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention16 août 2010 16 août 2010 à 08:47
Merci dark pour l'astuce, apres avoir mis :
For i = 0 To 30
Sleep 1000 'pause d'une seconde
If arret = True Then 'prévoit un échappatoire pour quitter la boucle si nécessaire
Exit For
End If
DoEvents
Next i
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 16 août 2010 à 08:52
Salut,
Oui en effet, un doevents permet à ton interface de se raffraichir toutes les secondes, ce qui n'est pas un luxe.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
toytoy190
Messages postés3Date d'inscriptionmardi 2 novembre 2004StatutMembreDernière intervention16 août 2010 16 août 2010 à 23:07
Merci Crasos30 pour ta contribution mais en effet, prendre 100% du CPU juste pour faire une pause dans un prog qui envoi de simple commande COM, ce n'est pas ce que je cherchai. Surtout dans une boucle ou l'operation peut etre renouvelé plus de 1000 fois... conso CPU inutile, et surchauffe a la longue.
je vais surement porté mon appli en .net, la au moins il y a les threads...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 17 août 2010 à 07:57
Salut,
Tu peux très bien utiliser les threads en vb6 : il faut passer pas les API windows, c'est un peu instable en mode IDE si tu t'y prends mal, mais c'est tout à fait réalisable.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement