Programme Winsock reste en mémoire !

HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011 - 3 janv. 2006 à 18:34
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011 - 4 janv. 2006 à 01:00
j'ai fait un code simple juste pour tester le problème ça donne ça :



------------------------------------------------------------------------------------------



Private Sub ConnectButton_Click()



'On met en écoute le port 6666.

Winsock1.LocalPort = 6666

Winsock1.Listen



End Sub



Private Sub QuitButton_Click()



'Fermeture du socket.


Winsock1.Close

'On appel la procédure QueryUnload.


Unload Me




End Sub



Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)



'On ferme le socket si il ne l'est pas déjà.

If Winsock1.State <> sckClosed Then

Winsock1.Close

'On décharge la feuille ce qui va appeller la procédure QueryUnload.

Unload Me

End If



End Sub





------------------------------------------------------------------------------------------



3 fonctions, 1 bouton Connect (ConnectButton) et un bouton Quit (QuitButton).



Quand on lance le programme et qu'on le quitte directement sans avoir
appuyé sur "Connect" ,le programme se décharge correctement
. Par contre si on se connect et qu'on quitte ensuite, la le programme
reste en mémoire avec un "pas de réponse" dans le gestionnaire des
tâches.

C'est étrange d'autant plus que j'utilise bien le "Unload Me".

Je précise qu j'utilise Microsoft Winsock Control 6.0 (SP6), le fichier est MSWINSCK.OCX en version 6.1.97.82

21 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
3 janv. 2006 à 19:02
Salut
A mon avis, il doit suffire de laisser le temps à windows d'exécuter :

Do While ws.State <> sckClosed
DoEvents
Loop

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
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 janv. 2006 à 19:03
salut,



et comme çà?




Private Sub ConnectButton_Click()

' On met en écoute le port 6666. (toujours fermer avant!!!)

Winsock1.Close

Winsock1.LocalPort = 6666

Winsock1.Listen

End Sub

'

'

Private Sub QuitButton_Click()

' Fermeture du socket.

Winsock1.Close



' On appel la procédure QueryUnload

' !! QUI APPELLERA LUI-MÊME LE UNLOAD SI PAS CANCEL!!

Unload Me

End Sub

'

'

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

' On ferme le socket si il ne l'est pas déjà.

' (test inutile à mon goût, mais bon)

If Winsock1.State <> sckClosed Then Winsock1.Close

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>



PCPT [AFCK]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 janv. 2006 à 19:06
Jack -> en principe non, le simple appel suffit

c'est juste qu'il reste dans le Query puisqu'appel UNLOAD en boucle....
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 20:20
Merci les gars pour les réponses,
bon j'ai testé ta boucle Jack ça ne fonctionne pas (c'était pourtant bien vu ).
PCPT le fait de fermé la connexion winsock avant la connexion et de supprimer le code dans QueryUnload ne fonctionne pas non plus !
Vous avez essayé chez vous ? parce que j'ai l'impression que ça fait ça que chez moi.
C'est chiant, tous mes prog avec winsock en VB reste en mémoire comme ça après fermeture.
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 janv. 2006 à 20:36
méthode draconienne:







Private Sub CmdQuitter_Click()

Dim x As Integer

Do Until Winsock.State = 0

Winsock.Close

DoEvents

Winsock.LocalPort = 0

Loop

For x = 1 To 50: DoEvents: Next

Unload Me

End Sub


Daniel
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 20:47
Meri Daniel mais...ça marche toujours pas !
Voici le code que j'ai utiliser, il fonctionne chez vous ?

Private Sub ConnectButton_Click()


Winsock1.Close
Winsock1.LocalPort = 6666
Winsock1.Listen


End Sub


Private Sub QuitButton_Click()
Dim I As Integer


Do Until Winsock1.State = 0
Winsock1.Close
DoEvents
Winsock1.LocalPort = 0
Loop


For I = 1 To 50
DoEvents
Next I


Unload Me


End Sub
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 janv. 2006 à 20:55
oui ça marche chez moi.

est-ce que tu as refait un reboot avant de tester, sinon l'erreur précédente peut rester.

tu peux encore rajouter, un contrôle ultime avant le Unload.







Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Dim x As Integer

Winsock.Close

DoEvents

Winsock.LocalPort = 0

If Winsock.State > 0 Then MsgBox "Erreur Unload"

For x = 1 To 20: DoEvents: Next

End Sub


Daniel
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 20:58
Non je n'ai pas rebooté par contre j'ai dégagé tous les processus des exécutions précédentes.
Ok, je vais essayer de rebooter, je vous tiens au courant.
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 22:44
Bon ben toujours pareil, c'est incompréhensible, j'ai rebooté, j'ai
coupé mon firewall, ma connexion internet, j'ai fermé toutes les
applications et ce fichu programme winsock reste en mémoire !

Je sent que je vais être obliger de réinstaller VB, voir carrément winfuck si ça continu...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 janv. 2006 à 22:56
t'as essayé sur un nouveau projet?

parce qu'avec toutes les propositions testées par chacun d'entre nous,
j'suis prêt à parier que ton problème vient d'ailleurs... genre une
autre form qui est juste hidden?!
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 23:15
Négatif PCPT je viens de tester en créant un nouveau projet en faisant
un copier coller du code et en ajoutant juste le contrôle Winsock au
projet et les 2 boutons. De toute façon je n'utilise jamais plusieurs
form dans un projet. Ce programme de daube continu à résider en mémoire
avec "pas de réponse" dans le gestionnaire des tâches.

Je crois que Winsock doit faire appel à des services réseau et j'en ai malheureusement viré certains dans un soucis de sécurité . Sinon la je vois pas si ça marche chez vous...

Au fait Daniel j'ai utilisé ton code la :



Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Dim I As Integer



If Winsock1.State <> 0 Then

MsgBox "Erreur Unload"

End If



For I = 1 To 20

DoEvents

Next



End Sub



Je n'ai pas la msgbox qui s'affiche ce qui veux dire que le socket est bel et bien fermé !

Si ça n'est pas une mauvaise fermeture du socket qui empêche la cloture du prog qu'est ce que c'est ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 janv. 2006 à 23:31
je viens (encore) de faire le test avec le même composant

Microsoft Winsock Control 6.0 (SP6) -> MSWINSCK.OCX



aucun problème chez moi, déchargement correct....

je ne pense pas que çà soit lié mais tu as essayé sur un autre port?



sinon çà ne peut logiquement pas être lié à ta connection ou configuration. à VB lui-même éventuellement...

dernier point, tu as essayé en mode pas à pas?
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 23:41
J'ai testé sur un autre port c'est idem, par contre tu fais bien de
soulever le point du pas à pas parce que j'ai oublié de vous dire que
quand j'utilise le débugage avec winsock ça plante VB ! Mort de rire !

En fait VB fait comme le prog "ne répond pas" et je suis obligé de tout fermer...

Je pensais que ça faisais ça chez tout le monde, que c'était encore une de joyeuseté de notre ami microsoft...
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 janv. 2006 à 23:41
est ce que la forme elle même est déchargée

et que reste-t-il en mémoire (composant Winsock, classe VBMsoStdCompMgr)

t'a peut être une version buggée de Winsock:

Microsoft Winsock Control 6.0 -> MSWINSCK.OCX version 6.00.8169


Daniel
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 janv. 2006 à 23:55
Daniel -> je n'ai pas ta version mais bien la même que notre désespéré HeavenForsaker

le problème doit venir directement de VB si le pas à pas plante....
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
3 janv. 2006 à 23:56
J'ai MSWINSCK.OCX en version 6.1.97.82

et Visual Basic 6.0 SP6 version 6.0.9782

La form n'est plus visible à l'écran, mais en mémoire apparement elle
est toujours la parce que durant l'éxecution le programme utilise 6852
ko et après fermeture le programme occupe 6932 ko

C'est fort tout de même un programme qui occupe plus d'espace mémoire après éxecution que pendant !
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
4 janv. 2006 à 00:02
Ouai mon VB doit schlinguer, pourtant je l'ai pas téléchargé sur emule
celui la (pour une fois), je l'ai eu durant mes études en BTS. C'est
bizar que ça plante uniquement avec Winsock quand même. faudrais que je
choppe une nouvelle version du contrôle pour voir.

Sinon il me reste plus qu'à acheter VB.NET ! halalala comment ils
poussent à la consommation chez microsoft, on voit les
professionnels...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 janv. 2006 à 00:06
je viens de t'héberger mon composant. c'est le même mais celui-ci fonctionne (VB6 pareil, sur XP pro SP1)

à toi de voir...

http://site.voila.fr/vrac-perso/dls/MSWINSCK.OCX

le pas à pas fonctionne d'habitude?
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
4 janv. 2006 à 00:39
Merci beaucoup PCPT, j'ai téléchargé ton fichier, je l'ai collé dans
system32, j'ai relancé VB, recompilé mon prog et la...MIRACLE ! nan je
déconne ! MDR ça marche toujours pas ! Oui
le pas à pas fonctionne nickel d'habitude, c'est uniquement quand je
connect avec Winsock que ça plante en débugage.Sinon ça viens peux être
du fichier winsock.dll ou de l'autre en 32bit ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 janv. 2006 à 00:52
j'aurais tenté^^

il reste encore peut-être une solution avant le formatage, mais il y a un risque de perte matérielle :

1er choix : classique mais peu efficace, le coup de pied sur la facade de la tour.

2ème : moins connue mais bien plus adapté : fléau fantassin. technique à adapter selon l'humeur.....





je ne pourrais être tenu pour responsable de l'interprétation de ce dernier post
0
Rejoignez-nous