Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





servidor no dedicado se cierra solo

Iniciado por Warchief, 28 de Noviembre de 2006, 02:59:17 PM

« anterior - próximo »

TheAzazel

En vez de llamar a CRM32Pro.Quit(), prueba a hacer una llamada a INetwork->Quit() y esta forzara a que se cierre todo.

// Si aun esta abierto el thread servidor: damos aviso de cierre, informamos de ello y esperamos que acabe.
  // Tarda unos ms en cerrarse.
  if(IInternal->bServer)
  {
  IInternal->ILogN->Msg(LOG_NORMAL," [SERVER] Warning: Quit() is going to close the server!.\n");
  IInternal->bServer = 0;
  // Damos un margen para que se cierre
  SDL_Delay(50);
  // Ahora esperamos hasta que se cierre
  while(IInternal->ServerThread != NULL) SDL_Delay(50);
      IInternal->ILogN->Msg(LOG_NORMAL," [SERVER] Warning: Quit() has just closed the server!.\n");
  }


Digamos que con IInternal->bServer=0 le estoy indicando a la thread del server que vaya saliendo... y hasta que no ha salido, esperara, como a mi siempre me cerro bien, no me puse mas radical: esperar 500ms maximo y si no se ha cerrado ella solita...me la cargo!.
Prueba a ver si te hace un Quit().

He mirado los ejemplos y si cierro la consola...se cierra del modo mas bestia posible jeje, ni quit ni leches...

Lo otro era una tonteria... digamos que ponia el IInternal->bServer=1 despues de crear el thread y por lo visto, si se ejecutaba muy rapidamente esa thread al estar aun bServer=0, pensaba que era una orden de salir...ha sido cambiar el orden y poner primero el bServer=1 y ya ves que ahora todo va fino :). Son los threads que hay que tener mucho ojo ymira que lo depure en maquinas single core y dual core y nunca me paso naa... lo dicho, ese HT...jejeje.

Otra cosa mas... no se si lo estas haciendo...pero no puede usar directamente la clase Network...o te creas un objeto dinamico o estatico pero instancia que los constructures y destructores tambien hacen sus cositas :)

Warchief

Con CRM32Pro.Quit() no se queda parado, es con INetwork->Quit().

Se ve que ese while(IInternal->ServerThread != NULL) SDL_Delay(50);  no termina?

Quieres pasarme una versión con un cout << "." en ese while?

Y fijo que es al meter la llamada en el destructor de una variable estática (de hecho los tengo en el destructor para asegurarme de que se libera todo aún cerrando a lo bestia sin pasar por Release)

PDI: HT Rulez!!!
PDII: Has leído PM?

TheAzazel

Perdon, un misunderstanding :)

en CRM32Pro.Quit() no se bloquea porque lo cierra a lo bruto :), vamos, que antes del CRM32Pro.Quit() habria que llamar al INetwork->Quit().

He agregado un poco de logeo para avisar de ello(que es un cierre muy muy bestia jeje).

Ahora me enchufo y te paso una con los puntitos, pero de fijo que se va a estar quedando hay, creo que no me va a quedar otra que comprobar que si tras 500ms no se ha chapado...se cargue el thread con un kill... de todos modos, veamos que sucede...

Warchief

Eso enchúfate y nos pasamos. Si prefieres te paso yo el código para que depures tú, eso sí con VS8, porque añadir los ficheros es un coñazo :)

TheAzazel

he agregado un par de log messages pero vamos..que hacer un CRM32Pro.QUit() sin antes un INetwork->Quit()...son memory leaks y demas movidas, solo que he intentado al menos, terminar algunas cosas de forma ordenada,dentro del caos claro, para que minimo no pete.

Ahora hace la espera en ambos quit, lo extraño, a mi me funciona de maravilla :S, de todos modos, te paso una nueva url que muestra caracteres sScC dependiendo de donde esten... a ver si averiguo que leches pasa...tambien va un netchat2 para que lo corras con -s, esta listo para petar pero a mi me sale de forma ordenada...a ver a ti que te pasa.

Por cierto, un HT disable y probar el netchat2 seria aclarador :P

http://www.megastormsystems.com/download/Lib2.rar

PD: lo he probado en un AthlonXP y en un AthlonX2 y en ambos tira bien... mañana en el curro usare un P4 con HTruño activado a ver...

Warchief

Cerrando a lo bestia con un INetwork->Quit() en el destructor, sólo salen S mayúsculas.

El netchat 2 cierra continuamente, pero no falla nunca.

Warchief

Para joder el chat:

1) Crea un .h con el código:

template <class T>
class SingletonStatic
{
   static T instancia;
public:
   static T& Instancia(){
       return instancia;
   }
};
template <class T>
T SingletonStatic<T>::instancia;


class Petador : public SingletonStatic<Petador>
{
   friend class SingletonStatic< Petador >;
private:
   Petador() { }
   ~Petador() {
       INetwork->Quit();
   }
};


Añade la llamada

  Petador::Instancia();

En el main de NetChat.

Y con eso tienes el mismo resultado que me pasa a mí. No se cierra ni con el botón de consola.

TheAzazel


Warchief

Con las versiones piratas que comentamos por mail, parece que sí.
Hay algunos problemas, deteniéndose el ordena o el explorador de windows durante un poco (del orden de entre 0 y N segundos :) ), pero no estoy seguro de si es por los hilos que usé (algún bloqueo), por el HT, ... Salvo por eso, funciona bien.
En cualquier caso era una miniaplicación para hacer un minichat gráfico. Nada serio, sólo una prueba.

La verdad es que fue sencillo, sobre todo la parte de red, con lo del servidor dummy.


Había pensado colgarlo como ejemplo de uso de CRM32Pro, pero no sé, no sé :) (incluso tengo una página web offline ( me pregunto para qué sirve esto  ) con una explicación curiosa)

El resultado fue:


<spam>
Así que, recomiendo CRM32Pro, no sólo por lo sencilla y potente que es (puedes hacer cualquier cosa ;) ), sino por el soporte recibido por parte de MegaStorm Systems (léase Az)
</spam>

Por mi parte doy por finalizada la miniaplicación.
PD: En apenas unos días, y eso que tardé más por utilizar patrones, y hacer un motorcillo wrapper de CRM32Pro

TheAzazel

ya, si a mi me pasaste la ultima version con todo bien explicadito, codigo fuente y una pagina en html :).
La verdad que yo lo colgaria en inet, te quedo bastante bien y graficamente, muy resulton :)

Gracias por los cumplidos jeje

A ver si lo pones online, ya nos contaras!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.