|
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
« 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
« en: Jueves 17 de Enero de 2013, 14:23 »
Ejemplo simple que hace lo que pido:
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
« 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
« en: Miércoles 26 de Diciembre de 2012, 22:07 »
El error ...
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
« 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 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 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... 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... 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
« 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
default: ;
Y si con un ; sin nada que es la sentencia para no hacer nada.
7
« 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
« 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 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!...
9
« 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
« 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
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
« 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
« 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
« 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.
14
« 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
void *vector[2]; vector[0]=(void *) &obteto0; vector[1]=(void *) &objeto1;
y en la función del thread hago
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]
|
|
|