Comment une procédure peut-elle vérifier continuellement l'état d'un winsock ?

cs_linux21 Messages postés 24 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 19 juin 2007 - 22 mai 2007 à 19:52
cs_linux21 Messages postés 24 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 19 juin 2007 - 22 mai 2007 à 23:27
Bonjour, étant débutant un peu autodidacte en vb6, quelque chose m'echappe complètement et m'handicape.

Prenons un exemple concret si vous le voulez bien.
Je suis en cours de création d'un chat client/serveur. J'utilise un composant winsock. Mon timer suit l'avancé de la connexion du client au serveur et inversement.

J'aimerai maintenant executer une procédure si et seulement si mon composant winsock arrive à l'état 7 (SckConnected). Cela peut vous paraitre basique mais tant mieux, moi ça m'échappe !

Mon idée premiere était bien sur de faire une procédure du style:
If Wserveur.State = 7 Then
(hop je glisse mes procédures)
End if

Mais cette procédure s'execute avec les autres et comme il voit que mon winsock n'est pas en état 7 il passe a autre chose et n'y revient jamais. Comment faire pour qu'il verifie tout le temps ? Un autre timer ? je bloque.. merci de votre aide.

3 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
22 mai 2007 à 20:34
Salut,

Dans un autre langage, une bonne solution aurait été le multi-threading, mais qui est hélas impossible en VB6.
Dans ce cas il te faut alors utiliser l'instruction DoEvents dans une boucle "infinie".
Par exemple tu pourrais imaginer une structure comme ceci :

While Wserveur.State <> 7
  DoEvents()
  'Opérations à effectuer tant qu'il n'est pas connecté
Wend
'Wserveur.State = 7
Opération à faire lorsqu'il se connecte

DoEvents permet au processus d'exécuter les message windows en attente pour ton application (comme par exemple un click sur un bouton, un déplacement de fenêtre, plein de choses...) et donc de l'empêcher de "freezer" pendant ta boucle.

Sinon l'idée d'utiliser un autre timer ne me semble pas particulièrement mauvaise non plus, à voir.

<hr size="2" width="100%" />Julien.
0
e_NeX Messages postés 104 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 30 novembre 2009
22 mai 2007 à 22:31
mouais julien...  tres moyen comme solution!

faire un DoEvents te bouffera tout ton CPU!!!

en VB6 le mieux est de mettre un timer, selon moi, toutes les 100 ms qui vérifie l'état du winsock!

if winsock.state <> 7 then .....

l'état #7 veux dire que ton winsock est connecté!

ne pas oublier de laisser le winsock en mode TCP/IP et non en UDP!

bonne prog!
0
cs_linux21 Messages postés 24 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 19 juin 2007
22 mai 2007 à 23:27
Merci de votre aide je pense que vos solutions vont m'aider :)
Affaire à suivre ^-^
0
Rejoignez-nous