Doevents e redonne pas toujours la main à d'autres processus
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 2013
-
11 oct. 2010 à 23:00
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 2013
-
12 oct. 2010 à 18:38
bonsoir à tous
j'ai créé un scrabble en réseau avec des winsock.
j'ai plusieurs boucle d'attente avec un doevents
j'ai aussi un chrono qui tourne et peut s'arrêter si tous les joueurs ont envoyés leurs comptes.
Private Sub TimerServeur_Timer()'l'interval est à 10ms
Dim meilleur As Byte
Dim pausetime As Integer
Dim start As Long
frm_plateau.TimerServeur.Enabled = False
pausetime = 60 ' Définit la durée en secondes
start = Timer ' Définit l'heure de début.
Do While Timer < (start + pausetime)
If NbreCompte = NbreJoueurConnecté Then
Exit Do
End If
DoEvents ' Donne le contrôle à d'autres processus.
Loop
NbreCompte = 0
triCompte
End Sub
le problème est que lors du premier doevents dans le timer il donne la main à d'autre processus pour arriver à une boucle d'attente
While Lpo = False
DoEvents
Wend
mais une fois dans cette boucle plus moyen d'en sortir pour revenir dans le timer et verifier que le temps est déclenché ou que le compte de joueur est bon.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 oct. 2010 à 23:28
Salut
Première remarque :
- Timer renvoie un Single
- Start est un Long
- pausetime est un Integer
Joli panachage, mais attention aux surprises.
2ème remarque :
While-Wend est obsolète : Utilise Do While-Loop
Solution : Supprime ta boucle d'attente dont tu ne peux sortir.
Ne sachant pas à quoi elle peut bien te servir, difficile de te donner des conseils, mais ce genre de boucle n'a pas d'intérêt. Si tu attends une condition, sort de ta Sub/Function, elle sera retestée au prochain passage.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 20131 12 oct. 2010 à 18:38
bonjour
merci pour cette prompte réponse!
en effet je n'ai pas prêter attention à mes variables! mille excuses, je vais rectifier!
quant à la la boucle d'attente, lorsque le winsock client reçoit la donnée Lpo, si le client est déjà dans la boucle d'attente il peut continuer, et ceux qui y arrivent continueront immédiatement leur programme!
mais je vais réfléchir pour la supprimer
merci encore