Page 1 sur 1

[v4 beta 9]: Input et fermeture Console [Corrigé]

Publié : mer. 29/mars/2006 18:34
par popstatic
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":

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()

Publié : mer. 29/mars/2006 21:49
par Backup
il manquerai pas un "KillThread(ThreadID)" par hazard ?

KillThread(ThreadID) permet de tuer le tread cela libere la ram je suppose :D

c'est a toi de gerer la fermeture de ton prg et de faire le KillThread(ThreadID) avant de fermer ..

Publié : mer. 29/mars/2006 22:29
par LeCyb
Comme le dit Dobro tu devrais gérer tes threads mais le problème que tu évoques ne se situe pas à ce niveau.

Exemple:

Code : Tout sélectionner

OpenConsole()
Input()
Si on ferme la console avec la croix -> Invalid Memory Access

Cela ne se produisait pas avec la v3.94

Publié : jeu. 30/mars/2006 0:37
par popstatic
oula oui j'avais même pas remarqué que un simple

Code : Tout sélectionner

openconsole()
input()
mettait la grouille.... rien à voir donc avec les threads et le réseau comme je le pensait... mais bug quand même.

Publié : lun. 03/avr./2006 17:35
par popstatic
Bug apparement non corrigé dans la beta 9