• Jueves 28 de Marzo de 2024, 19:53

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 - yellowpaper

Páginas: [1]
1
C/C++ / Duda y problemas con recv
« en: Domingo 21 de Julio de 2013, 15:39 »
Hola , escribo este mensaje para que me den una mano con un problema que estoy teniendo con la función recv.

Tengo en un servidor un for que envia datos con send del tipo "paquete numero (numero) cada 1 segundo y los recibo del lado del cliente y lo imprimo por pantalla.

Vale aclarar que recv como ya sabran , es bloqueante por lo tanto setee un timeout con setsockopt (creo que era esa la funcion) de 500 ms , si recv no escucha nada la aplicacion cierra automaticamente.

El echo es que esto no ocurre... cuando el servidor termina de manera abrupta , recv sigue recibiendo e imprimiendo por consola el ultimo mensaje enviado por el servidor  al infinito y mas allá de el...!

Entiendo que recv lee desde un buffer que es donde termina la informacion mandada por el servidor , y recv limpia el buffer leyendolo...
En este caso
Por que no termina de leerlo y no da un -1 como respuesta?
Existe alguna manera de limpiar el buffer de recv?

Gracias!

2
C# / Re:Thread/Hilos y C#
« en: Jueves 17 de Enero de 2013, 14:23 »
Ejemplo simple que hace lo que pido:

Código: [Seleccionar]

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private delegate void MostarEtiqueta(string et);

        private void button1_Click(object sender, EventArgs e)
        {
            Thread hilo = new Thread(cuenta);
            hilo.Start();
        }

        private void etiqueta(string et)
        {
            label1.Text = et;
        }

        private void cuenta()
        {
            for (int i = 0; i < 70000; i++)
            {
                label1.Invoke(new MostarEtiqueta(etiqueta), new object[] { i.ToString() });
            }
        }

   
    }

Suerte!

3
C# / Thread/Hilos y C#
« en: Miércoles 16 de Enero de 2013, 21:11 »
Hola chic@s de SoloCodigo , les comento mi duda tonta pero realmente necesaria que me la evacuen.
Tengo un formulario con un label y quiero mostrar cada cierto tiempo  el texto de ese label (que cambia en el tiempo desde un thread ) y  se refleje en el form de manera correcta (como si se tratara de un contador o un progreso ).
Busque pero me enquilombo demasiado con la explicacion del delegate y demas y ademas cuando uso lo del delegate no me funciona correctamente.

Si me lo explicaran estaria muy agradecido. Desde ya muchas gracias.

4
C/C++ / Re:error con un destructor
« en: Miércoles 26 de Diciembre de 2012, 22:07 »
El error ...

Código: [Seleccionar]
    cadena=new char[strlen(linea)];  A     cadena=new char[strlen(linea)+1];

Un error muy muy tonto , tan tonto que no lo pude descubrir ...gracias!.

5
C/C++ / error con un destructor
« en: Miércoles 26 de Diciembre de 2012, 13:37 »
Hola tengo un programa muy muy simple que  lee strings desde un archivo y los coloca en una nueva instancia (una por cada linea de archivo) de una clase que se llama Cadena.

En resumen seria

En el main

Código: [Seleccionar]

    FILE *archivo=fopen("archivo.txt","rt");
    char linea[5000];
    while(fgets(linea,5000,archivo))
        Cadena cadena(linea);

En la clase Cadena el constructor y el destructor serian

Código: [Seleccionar]
Cadena::Cadena(char *linea)
{
    cadena=new char[strlen(linea)];
    strcpy(cadena,linea);
}

Cadena::~Cadena()
{
        delete [] cadena;
}


Bien , ahora cuando lo pruebo el resultado es el siguiente...

Código: [Seleccionar]
novum homero cotidieque. Te utamur civibus eleifend qui, nam ei brute doming concludaturque, modo aliquam facilisi nec no. Vidisse maiestatis
constituam eu his, esse pertinacia intellegam ius cu. Eos ei odio veniam, eu sumo altera adipisci eam, mea audiam prodesset persequeris ea. Ad vitae dictas
vituperata sed, eum posse labore postulant id. Te eligendi principes dignissim sit, te vel dicant officiis repudiandae. Id vel sensibus honestatis omittantur, vel cu]
*** glibc detected *** ./Nuevo: double free or corruption (!prev): 0x000000000111c250 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f56a63f9b96]
./Nuevo[0x401d71]
./Nuevo[0x401061]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f56a639c76d]
./Nuevo[0x400f29]
======= Memory map: ========
00400000-00406000 r-xp 00000000 08:05 13762701                           /home/martin/Trabajo/mapa/Nuevo/bin/Debug/Nuevo
00605000-00606000 r--p 00005000 08:05 13762701                           /home/martin/Trabajo/mapa/Nuevo/bin/Debug/Nuevo
00606000-00607000 rw-p 00006000 08:05 13762701                           /home/martin/Trabajo/mapa/Nuevo/bin/Debug/Nuevo
0111c000-0113d000 rw-p 00000000 00:00 0                                  [heap]
7f56a607f000-7f56a617a000 r-xp 00000000 08:06 6299866                    /lib/x86_64-linux-gnu/libm-2.15.so
7f56a617a000-7f56a6379000 ---p 000fb000 08:06 6299866                    /lib/x86_64-linux-gnu/libm-2.15.so
7f56a6379000-7f56a637a000 r--p 000fa000 08:06 6299866                    /lib/x86_64-linux-gnu/libm-2.15.so
7f56a637a000-7f56a637b000 rw-p 000fb000 08:06 6299866                    /lib/x86_64-linux-gnu/libm-2.15.so
7f56a637b000-7f56a6530000 r-xp 00000000 08:06 6299858                    /lib/x86_64-linux-gnu/libc-2.15.so
7f56a6530000-7f56a672f000 ---p 001b5000 08:06 6299858                    /lib/x86_64-linux-gnu/libc-2.15.so
7f56a672f000-7f56a6733000 r--p 001b4000 08:06 6299858                    /lib/x86_64-linux-gnu/libc-2.15.so
7f56a6733000-7f56a6735000 rw-p 001b8000 08:06 6299858                    /lib/x86_64-linux-gnu/libc-2.15.so
7f56a6735000-7f56a673a000 rw-p 00000000 00:00 0
7f56a673a000-7f56a674f000 r-xp 00000000 08:06 6295141                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f56a674f000-7f56a694e000 ---p 00015000 08:06 6295141                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f56a694e000-7f56a694f000 r--p 00014000 08:06 6295141                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f56a694f000-7f56a6950000 rw-p 00015000 08:06 6295141                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f56a6950000-7f56a6a32000 r-xp 00000000 08:06 269768                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f56a6a32000-7f56a6c31000 ---p 000e2000 08:06 269768                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f56a6c31000-7f56a6c39000 r--p 000e1000 08:06 269768                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f56a6c39000-7f56a6c3b000 rw-p 000e9000 08:06 269768                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f56a6c3b000-7f56a6c50000 rw-p 00000000 00:00 0
7f56a6c50000-7f56a6c72000 r-xp 00000000 08:06 6299872                    /lib/x86_64-linux-gnu/ld-2.15.so
7f56a6e42000-7f56a6e47000 rw-p 00000000 00:00 0
7f56a6e6d000-7f56a6e72000 rw-p 00000000 00:00 0
7f56a6e72000-7f56a6e73000 r--p 00022000 08:06 6299872                    /lib/x86_64-linux-gnu/ld-2.15.so
7f56a6e73000-7f56a6e75000 rw-p 00023000 08:06 6299872                    /lib/x86_64-linux-gnu/ld-2.15.so
7fffa29c5000-7fffa29e6000 rw-p 00000000 00:00 0                          [stack]
7fffa29ff000-7fffa2a00000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Abortado (`core' generado)

Lee el archivo hasta un punto (depende el archivo que pona y otras cirscunstacias) y despues un error... :rain: y si lo pruebo con otro archivo tengo  otro error (no el mismo pero del mismo estilo del volcado de memoria)...
Si al destructor lo dejo limpio sin nada el programa funciona pero eso no esta bien...
Que esta pasando? Por que realmente no lo entiendo

6
C/C++ / Re:Warning con switch
« en: Miércoles 20 de Junio de 2012, 23:05 »
La solucion para que este warning no exista es poner al final de todas las sentencias de case

Código: [Seleccionar]
default:
;

Y si con un ; sin nada que es la sentencia para no hacer nada.

7
Programación de Videojuegos / Re:SDL y Clases
« en: Miércoles 20 de Junio de 2012, 01:49 »
Es posible hacerlo , siempre y cuando , las sentencias y funciones estén en orden , y sean correctas (me estaba equivocando en eso)

8
Programación de Videojuegos / SDL y Clases
« en: Martes 19 de Junio de 2012, 21:45 »
Esto realmente no lo se y son mis primeros pasos en SDL.
Tengo una clase Pieza con todos los metodos que necesito e incluso con un método que refresca

Código: [Seleccionar]
void Casillero::Mostrar(SDL_Surface *screen)
{
    SDL_BlitSurface(imagen,NULL,screen,&rectangulo);
}

pero cuando la llamo en el programa principal , no funciona , no se ve la imagen y no entiendo bien si puedo trabajar con los comandos de SDL por fuera del main (obviamente la refresco llamando a otro metodo)...Alguien por favor una ayuda!... :adios:

9
C# / Re:Matriz Adjunta
« en: Martes 19 de Junio de 2012, 21:37 »
En http://es.wikipedia.org/wiki/Matriz_inversa en la parte de Inversión de matrices de órdenes superiores ahi hay una formula que se puede progrmar, desde ya te digo (si no me equivoco) que para programar eso tenes que usar recursividad. Pensalo bien

10
C/C++ / Warning con switch
« en: Domingo 17 de Junio de 2012, 21:23 »
Hola , estoy programando con SDL y tengo un problema (unos warnings)  cuando utilizo codeblocks.
En un momento determinado del codigo hago esto
Código: [Seleccionar]
case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)  //Tecla apretada
                    {
                        case SDLK_UP:   //En el caso de que la tecla apretada sea Arriba hacer....
                            b[0]=1;
                        break;

                        case SDLK_LEFT:
                            b[1]=1;
                        break;  // y sigue...

(En resumidas cuentas hago un switch sin considerar todas las teclas solamente arriba abajo izquierda y derecha).
Ahora cuando lo trato de compilar g++ (con las opciones por defecto de codeblocks) me devuelve los siguientes Warnings

el valor de enumeración ‘SDLK_FIRST’ no se maneja en un switch [-Wswitch]
el valor de enumeración ‘SDLK_BACKSPACE’ no se maneja en un switch [-Wswitch]

Y asi con todas las teclas que no considero en el switch...
Es muy molesto por que no se como solucionar ese error en el codigo sin poner todas los casos ni setear a codeblocks para que no haga el chequeo Wswitch (o no se lo mando como parmtro al compilador mejor dicho)...

Alguien tiene alguna idea de esto???

11
C/C++ / Re:Como saber que thread se esta ejecutando
« en: Miércoles 13 de Junio de 2012, 14:28 »
Bueno lo solucione , no mostrando que hilo o tid es sino identificandolo de otra manera
si al la funcion de thread se le pasa un puntero a void , imprimo ese puntero a void y asi lo puedo identificar!

12
C/C++ / Como saber que thread se esta ejecutando
« en: Lunes 11 de Junio de 2012, 13:56 »
Hola de nuevo. Pregunto , en Linux en C con la biblioteca de threads , existe alguna manera de saber que thread se esta ejecutando para poder asi escribirla en pantalla???


Gracias.

13
C/C++ / Re:Como pasar por parametro una matriz de punteros?
« en: Lunes 11 de Junio de 2012, 13:53 »
Bueno , lo soluciono creando una clase auxiliar que contiene dos punteros (uno de objeto 1 y otro de objeto2 ) y eso es lo que termino pasando por parametro y no ese array de punteros void que por lo que veo no es posible o no lo se hacer.
 :gracias:

14
C/C++ / Como pasar por parametro una matriz de punteros?
« en: Domingo 10 de Junio de 2012, 15:05 »
Hola , estoy haciendo un ejercicio de threads en Linux donde tengo que utilizar para su creación pthread_create . Como sabrán esa función tiene un parámetro que es el puntero? a una función de lo que va a hacer el thread. Esa función recibe un solo parámetro que es un puntero a void.
Necesito enviar 2 punteros de dos objetos distintos, por lo que hice esto
Código: [Seleccionar]

             void *vector[2];
             vector[0]=(void *) &obteto0;
             vector[1]=(void *) &objeto1;

y en la función del thread hago

Código: [Seleccionar]

void *funcion(void *inf)
{
    objeto1 *ed = (objeto1 *)  inf[1];

Pero no me deja hacerlo

Me da errores como :
aviso: se usó un puntero de tipo ‘void *’ en la aritmética [-Wpointer-arith]|
o como
ISO C++ prohíbe incrementar un puntero de tipo ‘void*’ [-fpermissive] (si quiero hacer inf++)


Alguien me puede explicar por que poasa esto y coomo solucionarlo...incluso si quiero castear a (void * [] ) tampoco me deja hacerlo..

Chau y gracias!

Páginas: [1]