|
| Iniciado por nicolas.cabrie, 19,feb. 2020 10:31 - 2 respuestas |
| |
| | | |
|
| |
| Publicado el 19,febrero 2020 - 10:31 |
Bonjour,
pour un client je dois utiliser des sockets.
J'ai un bouton qui me permets de créer un socket + thread:
SI ThreadEtat("THREAD_Event") <> threadInexistant ALORS ThreadArrête("THREAD_Event") FIN
SI SocketExiste("Serveur") ALORS SocketFerme("Serveur") FIN
SocketCrée("Serveur",55561,"192.168.0.1")
ThreadExecute("THREAD_Event",threadNormal,THREAD_Event)
La procédure THREAD_Event réalise une boucle :
BOUCLE SI SocketAttendConnexion("Serveur") = Vrai ALORS Trace("Socketconnect OK") sCanal = SocketAccepte("Serveur") SocketChangeModeTransmission(sCanal,SocketMarqueurFinBuffer,Caract(Null)) BOUCLE m++ Trace("Boucle XML : "+m) sXMLTemp = SocketLit(sCanal,Vrai) SI sXMLTemp <> "" ALORS Event.XML = sXMLTemp HAjoute(Event) AnalyseXML(sXMLTemp) sXMLTemp = "" FIN FIN FIN FIN
En Go dans Windev ca marche au premier lancement. J'ai un autre bouton pour fermer le socket et tuer le thread. Si je reclique sur mon bouton initial qui crée le thread et le socket alors ca ne fonctionne plus. Il semblerait que SocketAttendConnexion soit toujours faux.
Pour que ca refonctionne je dois stopper mon test dans Windev puis relancer en Go. Auriez-vous une idée de pourquoi ca marche au premier coup mais plus ensuite ?
Merci |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
| Publicado el 19,febrero 2020 - 15:21 |
Bonjour,
Déjà évite les boucles sans sortie. Met un time out sur ton SocketAttendConnexion Pour arrêter ton thread, ajoute une variable global et dans ton thread si ta variable globale est à vrai alors arrête ton thread avec Thread fin
Procedure MaFenêtre()
GLOBAL gbArret est un booléen
SI ThreadEtat("THREAD_Event") <> threadInexistant ALORS gbArret = Vrai FIN
SI SocketExiste("Serveur") ALORS SocketFerme("Serveur") FIN
SocketCrée("Serveur",55561,"192.168.0.1")
ThreadExecute("THREAD_Event",threadNormal,THREAD_Event) .
BOUCLE SI gbArret ALORS SORTIR FIN SI SocketAttendConnexion("Serveur",10) = Vrai ALORS Trace("Socketconnect OK") sCanal = SocketAccepte("Serveur")
SocketChangeModeTransmission(sCanal,SocketMarqueurFinBuffer,Caract(Null))
BOUCLE SI gbArret ALORS SORTIR FIN m++ Trace("Boucle XML : "+m) sXMLTemp = SocketLit(sCanal,Vrai)
SI sXMLTemp <> "" ALORS Event.XML = sXMLTemp HAjoute(Event)
AnalyseXML(sXMLTemp)
sXMLTemp = "" FIN
FIN FIN ThreadFin() FIN |
| |
| |
| | | |
|
| | |
| |
| Publicado el 20,febrero 2020 - 12:11 |
Bonjour,
merci pour ce retour, j'ai appliqué tes conseils mais cela ne solutionne pas mon problème. Apres arret, la re création du socket + thread se fait bien mais SocketAttendConnexion est toujours faux Je ne comprends pas |
| |
| |
| | | |
|
| | | | |
| | |
|