• Viernes 8 de Noviembre de 2024, 23:21

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - rbarreon

Páginas: [1]
1
C/C++ / Re: Puntero This
« en: Lunes 28 de Agosto de 2006, 02:05 »
Hola solarin.

Eso es debido a que en la función trabajas con las clases hijas a través de un puntero de tipo clase padre.

Si el número de clases que heredan de Notifier no es muy elevado puedes utilizar typeid o dynamic_cast para saber el nombre de la clase hija, utilizandolo de la siguiente manera:

void NotifyWarningMessage(Notifier* noti, Message msg){

    if(typeid(*noti) == typeid(ClaseQueHeredaDeNotifier1)){
         cout << "La clase es de tipo ClaseQueHeredaDeNotifier1" << endl;
    }
    if(typeid(*noti) == typeid(ClaseQueHeredaDeNotifier2)){
         cout << "La clase es de tipo ClaseQueHeredaDeNotifier2" << endl;
    }
    if(typeid(*noti) == typeid(ClaseQueHeredaDeNotifier3)){
         cout << "La clase es de tipo ClaseQueHeredaDeNotifier3" << endl;
    }
   
    ... //Así sucesivamente con todas las clases que heredan de Notifier

}

La otra opción es utilizar dynamic_cast<> de la misma forma. Este operador sirve para hacer casting dinámico, es decir, tienes una clase padre, y de ella heredan varias clases hijas (como en tu caso), pues si instancias varias clases hijas utilizando para ello un puntero de la clase padre, con dynamic_cast puedes transformar ese objeto a un objeto manejado a través de un puntero de la clase hija a la que pertenece. Es algo engorroso, aquí un ejemplo para aclarar:

//Punteros de la clase padre
Notifier* x;
Notifier* y;

/* Instanciamos objetos de tipo "clases que heredan de notifier" con punteros de la clase padre */
x = new ClaseQueHeredaDeNotifier1();
y = new ClaseQueHeredaDeNotifier2();

//Ahora ponemos ejemplos de cuando se puede llevar a cabo el casting dinámico

/* Este casting es posible ya que en x hay instanciado un objeto de tipo ClaseQueHeredaDeNotifier1 */

ClaseQueHeredaDeNotifier1* c;
c = dynamic_cast<ClaseQueHeredaDeNotifier *>(x);

/* Este casting no es posible ya que en y el objeto que hay instanciado no es de tipo ClaseQueHeredaDeNotifier1 */

ClaseQueHeredaDeNotifier1* v;
v = dynamic_cast<ClaseQueHeredaDeNotifier1 *>(y);

NOTA: Cuando dynamic_cast<> se lleva a cabo satisfactoriamente devuelve un puntero hacia el objeto ya convertido a la clase deseada. Cuando falla devuelve 0.

Bien, pues para saber el nombre de la clase hija lo utilizamos de la siguiente manera:

void NotifyWarningMessage(Notifier* noti, Message msg){

    ClaseQueHeredaDeNotifier1* x;
    if(x = dynamic_cast<ClaseQueHeredaDeNotifier1*>(noti)){
         cout << "ClaseQueHeredaDeNotifer1" << endl;
    }

    ClaseQueHeredaDeNotifier2* y;
    if(y = dynamic_cast<ClaseQueHeredaDeNotifier2*>(noti)){
         cout << "ClaseQueHeredaDeNotifer2" << endl;
    }

    ... //Así sucesivamente con todas las clases que heredan de Notifier

}

En fin, espero que te sea de utilidad.
Saludos.

2
Java / Sockets + Threads
« en: Viernes 25 de Agosto de 2006, 11:35 »
Primero de todo, mando un saludo para toda la gente de aquí y una enhorabuena para la gente encargada de este foro ya que soy nuevo por estos barrios :)

Bueno, mi problema es que me gustaría saber si en Java hay algun mecanismo por el cual puedas repartir tu ancho de banda entre numerosos hilos, los cuales, realizan conexiones a un host remoto determinado para verificar si tiene abierto un puerto. Cada hilo chequea independientemente si el puerto está abierto o no, finalizando si está abierto, y si está cerrado finalizará cuando caduque el timeout.

Mi problema es que tengo una conexión de 56kb y lanzo mi aplicación que comienza a crear hilos, los cuales, van conectando a hosts remotos diferentes en busca de un puerto abierto. Pues bien, limito el número máximo de hilos simultaneos a 20 y pongo un timeout de 2 segundos. Si ejecuto la aplicación con esta configuración bajo un servidor con una conexión ADSL la aplicación funciona perfectamente detectandome todos los hosts remotos con dicho puerto abierto, pero si ejecuto la aplicación en mi conexion 56kb no funciona, ya que no me detecta ningún host remoto que tenga dicho puerto abierto. Para que funcione en mi conexión de 56kb configuro la aplicación con un timeout de 2 segundos y limito el número máximo de hilos que se pueden ejecutar simultaneamente a 2, de esta forma me funciona correctamente pero es un poco lento comparado con la otra configuración.

Debido a esto, me gustaría saber si existe algo para saber que ancho de banda se tiene, y de esta forma pues poner una configuración determinada. Supongo que las aplicaciones como Nmap hacen programación multihilos y es efectiva se realice el escaneo desde una conexión de 56kb como en una ADSL pero ya no se si es mas lenta o más rápida según la conexión.

En fin, gracias de antemano y saludos.

Páginas: [1]