Invalid memory acces ....
Invalid memory acces ....
Hello
Je fait des test reseau et j'ai quelque probleme coter serveur et coter client ... Voici l'erreur retourner
[11:20:22] Waiting for executable to start...
[11:20:22] Executable started.
[11:23:53] [ERROR] Serveur.pb (Line: 382)
[11:23:53] [ERROR] Invalid memory access.
[11:23:54] [ERROR] Serveur.pb (Line: 383)
[11:23:54] [ERROR] Invalid memory access.
[11:23:54] The Program execution has finished.
Qui correspond a:
Delay(10)
Until EventID = #PB_Event_CloseWindow Or quit=1
J'ai cette erreur sur le Client et le serveur et sa interviens a intervale irregulier 1h, 2min, 40 min .... sa intervien quand on est au moins 2 de conecter....
Est ce que quelqu'un sais a quoi correspond cette erreur et a quoi elel correspond ...
merci d'avance
allez
a+
Scaraber
Je fait des test reseau et j'ai quelque probleme coter serveur et coter client ... Voici l'erreur retourner
[11:20:22] Waiting for executable to start...
[11:20:22] Executable started.
[11:23:53] [ERROR] Serveur.pb (Line: 382)
[11:23:53] [ERROR] Invalid memory access.
[11:23:54] [ERROR] Serveur.pb (Line: 383)
[11:23:54] [ERROR] Invalid memory access.
[11:23:54] The Program execution has finished.
Qui correspond a:
Delay(10)
Until EventID = #PB_Event_CloseWindow Or quit=1
J'ai cette erreur sur le Client et le serveur et sa interviens a intervale irregulier 1h, 2min, 40 min .... sa intervien quand on est au moins 2 de conecter....
Est ce que quelqu'un sais a quoi correspond cette erreur et a quoi elel correspond ...
merci d'avance
allez
a+
Scaraber
salut,
oui ca y ressemble.
il faut compiler avec l'option threadsafe si ce n'est pas déjà fait.
s'il y a toujours le problème il faut repérer quelles sont les ressouces (variables, buffers, strings, handles, ...) du code qui seraient sollicités par plusieurs threads en même temps. et s'employer avec les fonctions Mutex (commandes arrivées avec PB4 pour gérer plusieurs threads).
oui ca y ressemble.
il faut compiler avec l'option threadsafe si ce n'est pas déjà fait.
s'il y a toujours le problème il faut repérer quelles sont les ressouces (variables, buffers, strings, handles, ...) du code qui seraient sollicités par plusieurs threads en même temps. et s'employer avec les fonctions Mutex (commandes arrivées avec PB4 pour gérer plusieurs threads).
Salut
merci de vos reponce voici mon code de reception des donnée
Comment lancer avec l'option ThreadSafe ?*va chercher mais au cas ou*
j'ai un tableau qui peute etre utiliser par un les 2 thread (reception/envoie) et par le programme principale lors de la deconexion d'un joueur (c'est possible car sa plante quand un joueur deconecte)
Chez le client sa bug defois quand un joueur se conecte ....
bon allez
a+
Scaraber
merci de vos reponce voici mon code de reception des donnée
Code : Tout sélectionner
clientID = EventClient()
*Buffer = AllocateMemory(4194304)
ReceiveNetworkData(clientID, *Buffer, 4194304)
packet.s = PeekS(*Buffer,MemoryStringLength(*Buffer),#PB_Ascii)
//// Traitement du paquet
FreeMemory(*Buffer)
Comment lancer avec l'option ThreadSafe ?*va chercher mais au cas ou*
j'ai un tableau qui peute etre utiliser par un les 2 thread (reception/envoie) et par le programme principale lors de la deconexion d'un joueur (c'est possible car sa plante quand un joueur deconecte)
Chez le client sa bug defois quand un joueur se conecte ....
bon allez
a+
Scaraber
Déjà , tu alloue ~4mo lors d'une reception de message, imagine que tu as 32 client connecter (128mo) et qui t'envois des infos en permanence...
Pour le threadsafe, c'est dans les options de compilation.
mais ca ne va pas régler ton problème, les exemples fournis avec purebasic sont faux , si tu t'appuis dessus , tu iras droit dans le mur. comme la dit flype, la solution est certainement les mutex.
Pour le threadsafe, c'est dans les options de compilation.
mais ca ne va pas régler ton problème, les exemples fournis avec purebasic sont faux , si tu t'appuis dessus , tu iras droit dans le mur. comme la dit flype, la solution est certainement les mutex.
Ne dépasse pas le Ko pour ton buffer, ca ne sert à rien d'avoir un truc immense (à moins que tes packets soit gros)
Mieux vaut éviter de partager les ressources entre les threads, puis ce que ca provoque des crash si c'est pas bien maitrisé et les mutex diminuent beaucoup l'interet du multithreading. Bref, essaye de mieux penser ton partage de ressource avant de te sentir obligé d'utiliser des semaphore/mutex.
Le threadsafe de la V4.00 n'est pas parfait (il a tendance à provoquer des bugs imprevisibles chez moi quand j'appelle une dll externe °_°), il semble que ca ait été corrigé dans la 4.01
Mieux vaut éviter de partager les ressources entre les threads, puis ce que ca provoque des crash si c'est pas bien maitrisé et les mutex diminuent beaucoup l'interet du multithreading. Bref, essaye de mieux penser ton partage de ressource avant de te sentir obligé d'utiliser des semaphore/mutex.
Le threadsafe de la V4.00 n'est pas parfait (il a tendance à provoquer des bugs imprevisibles chez moi quand j'appelle une dll externe °_°), il semble que ca ait été corrigé dans la 4.01