Doevents e redonne pas toujours la main à d'autres processus

cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 - 11 oct. 2010 à 23:00
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Derniè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.


J'espère être assez clair!!!

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 1
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
0
Rejoignez-nous