[v4 beta 9]: Input et fermeture Console [Corrigé]
Publié : mer. 29/mars/2006 18:34
Bonjour à tous,
J'ai constaté ces jours ci un problème: apparement console, threads et réseau ne font pas bon ménage... je m'explique:
je suis en train de programmer un serveur (pour la reception de fichiers), pour l'instant en mode console.
je lance un thread au démarrage (la boucle qui check les évenements réseau) et là surprise, même si aucun évenement réseau n'est arrivé (i.e connection d'un nouveau client) lorsque je ferme la console via le bouton "croix" de la console (oui oui en haut a droite) le programme plante: verdict du debuggeur: Invalid Memory Access.
par contre si je met un "Input()" à la fin, ça plante toujours si je ferme avec le bouton, mais ça ne plante pas si je tappe "entrée" et le programme quitte alors proprement.
Ce problème éxistait déjà sous la beta 7, et m'est arrivé aussi pour mon serveur web, qui de même utilisait les threads.
Donc il semblerait que lorsque le programme se termine, il n'y à pas de fermeture des threads ou du réseau ou un truc du genre...
PS: l'option de compilation "console" ne change rien.
Ci dessous un exemple de code qui reproduit ce "bug", à compiler avec l'option "Threadsafe":
J'ai constaté ces jours ci un problème: apparement console, threads et réseau ne font pas bon ménage... je m'explique:
je suis en train de programmer un serveur (pour la reception de fichiers), pour l'instant en mode console.
je lance un thread au démarrage (la boucle qui check les évenements réseau) et là surprise, même si aucun évenement réseau n'est arrivé (i.e connection d'un nouveau client) lorsque je ferme la console via le bouton "croix" de la console (oui oui en haut a droite) le programme plante: verdict du debuggeur: Invalid Memory Access.
par contre si je met un "Input()" à la fin, ça plante toujours si je ferme avec le bouton, mais ça ne plante pas si je tappe "entrée" et le programme quitte alors proprement.
Ce problème éxistait déjà sous la beta 7, et m'est arrivé aussi pour mon serveur web, qui de même utilisait les threads.
Donc il semblerait que lorsque le programme se termine, il n'y à pas de fermeture des threads ou du réseau ou un truc du genre...
PS: l'option de compilation "console" ne change rien.
Ci dessous un exemple de code qui reproduit ce "bug", à compiler avec l'option "Threadsafe":
Code : Tout sélectionner
OpenConsole()
InitNetwork()
Procedure threadvide(vide.b)
Repeat
Select NetworkServerEvent()
Case #PB_NetworkEvent_Connect
PrintN("Client connecte")
EndSelect
Delay(1)
ForEver
EndProcedure
PrintN("Lancement du Thread")
CreateNetworkServer(0,6666)
Tid.l=CreateThread(@threadvide(),0)
Input()