Si está utilizando un hilo (no principal, por ejemplo, una conexión de calcetín) y el hilo principal para que compartan la misma pila. Resuelve de esta manera: simplemente crea un hilo con su propia pila para cada conexión.
Problema> cada llamada que usted hace llama a la pila para el marco (el problema tan grande compartido) ejemplo que llama proc aa (a, b: integer) por ejemplo al llamar siempre la misma función o una diferente;
Tiene un hilo de socket ejecutándose, y onconnect llama a proc a; y se queda haciendo algo, demora 5 segundos.
si alguien se conecta antes de la conexión de conexión directa (pila de liberación). Tiene las 2 clientes conectados (marcos de pila 2 diff con cada dato diferentes)
pila
empuje a, b (número entero); Valores 5,10 - desde 1 conn
push a, b (integer); Valores 7,3 - desde 2 conn
si el onconnect llama a las funciones a (5,10) y se queda haciendo algo durante aproximadamente 5 segundos. y alguien se conecta al servidor de nuevo, vuelve a llamar para volver a conectarse.
La pila antigua, el primer marco de llamada, aún no salió de proceso. Así que no apareció a, b de (5,10)
Es más complejo que esto si se vuelve a llamar, entonces sobrescribirá los datos en el 2 fotograma (variable de proc local de 2 conexiones) así que cuando 2 conexiones obtener datos de la pila ya está anulado por otra información para asegurarse. por lo que hará un comportamiento incorrecto.
Cuando la primera conexión está desconectada aparecerá a, b pero 7,3 (desde la segunda conexión) y no la 5,10 guardada. por lo tanto, acumulará desbordamiento no en el momento, pero más tarde con el programa ejecutándose y los errores de lanzamiento de la pila obtendrá finalmente una pila $FFFFFFFF $SP
. por lo que tratará de $FFFFFFAA
cuando llame a una función, por lo que es más grande que ya stack ex: $M 65536
y no 4 gigabytes como $FFFFFFAA
.
elevar el tamaño de la pila casi seguramente retrasará la resistencia, quizás debería reducirla para detectar el problema más temprano? – Mawg