|
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 - diego.martinez
Páginas: 1 [2] 3 4 ... 12
26
« en: Lunes 18 de Octubre de 2010, 18:56 »
buenas: estoy programando un interprete, y lo tengo hecho de este estilo: try { CallFunction("main"); return Ret.value; } catch(ParseException exc) { sntx_err(exc.get_err()); }
Asi, durante el proceso del parsing de la funcion main, se realiza toda la interpretación del script. Cuando el script encuentra un error de sintaxis (u otros), lanza un throw(ParseException(IDENTIFICADOR_DE_TIPO))
Así, cuando encuentra un error, aborto el Parsing y muestro el error usando la cuncion sntx_err que simplemente muestra la función y la linea y columna de error, con su tipo. El tema es, como puedo hacer que ejecute el throw, PERO CONTINUE EL PARSING después de la excepción? o sea, que no se finalice al terminar el catch, si no que continue despues del throw si es permisible (por el gestor de errores), por que si no, solo me muestra un fallo por interpretación. (Tengo todo el codigo para modificar, pero no se como hacerlo). gracias!
27
« en: Miércoles 13 de Octubre de 2010, 16:03 »
buenas
Ya he conseguido poner las extensiones de winsock y poder usar el DisconnectEx
sin embargo, cuando lo ejecuto me bloquea la aplicación durante todo el tiempo del time_wait (varios minutos)
en la documentacion lo dice:
Note The socket level disconnect is subject to the behavior of the underlying transport. For example, a TCP socket may be subject to the TCP TIME_WAIT state, causing the DisconnectEx call to be delayed.
hay alguna solucion a esto?
gracias!
28
« en: Martes 28 de Septiembre de 2010, 15:55 »
gracias, pero me pasa algo curioso
incluyo Mswsock.h pero me sigue dando
error C3861: 'DisconnectEx': identifier not found, even with argument-dependent lookup
he puesto tambien la WINVER a 0x0500 por si acaso pero sigue dandome el mismo fallo, en msdn no pone nada al respecto. ¿Que tengo que hacer?
29
« en: Miércoles 22 de Septiembre de 2010, 20:23 »
has comprobado el error que te devuelve?
si los sockets los has definido como non-blocking, siempre que haces una accion con ellos (recv, send, recvfrom...) retornan inmediatamente con un error y ponen como error
WSA_SHOULDBLOCK
que indica que el socket ha finalizado por ser no bloqueante, pero el proceso se realiza igualmente de forma no secuencial (tal y como explicas).
mira a ver si tienes algo como ioctl o algo asi cambiando el comportamiento del socket.
30
« en: Miércoles 22 de Septiembre de 2010, 18:04 »
Buenas: Tengo una aplicación que escucha un puerto UDP por un puerto (digamos que 10000) y que envia los datos tratados por otro puerto TCP digamos el 10001. Son Sockets non-blocking. Uso el FD_SET y el select para saber si tienen datos de entrada o salida para enviar y recibir. Todo funciona correctamente, pero cuando finalizo las conexiones, al intentar reabrir de nuevo, me encuentro con problemas. El socket TCP se queda en un estado en el que nunca tiene forma de escribir y siempre lee 0 bytes. El select siempre me da como que tiene para leer, pero no para escribir. Si hago netstat -ano en el equipo, me encuentro que los sockets no han sido eliminados sino que estan en TIME_WAIT y encima hay multiples sockets conectados de la misma forma. el finalizado del socket lo hago con shutdown() y luego closesocket() son sockets en WIN32. int W32SOCKET_TCP::Close() { this->State=GSOCKET::STATE::KILLING; shutdown(this->ID,2); return closesocket(this->ID); //ID es el identificador de SOCKET }
que estoy haciendo mal? por que no se finalizan los sockets para que pueda volverlos a abrir? PD: no estoy usando multitarea. Uso una función Poll para enviar y recibir segun el estado del select. gracias!
31
« en: Miércoles 8 de Septiembre de 2010, 13:59 »
pues una vez abierto el fichero:
int fread(FILE * f, size_t tamaño, int numero a leer, void * memory)
osea, para leer las 10 harias
fread(Fichero, sizeof(LIST_ELEMENT),10,elements);
32
« en: Jueves 22 de Julio de 2010, 00:05 »
Buenas:
Estoy creando una demo de 4k y estoy desactivando toda la runtime. Pero me ha surgido un problema con los senos y cosenos.
: error LNK2019: símbolo externo __CIcos sin resolver al que se hace referencia en la función _cosf
es un fallo curioso y no se como evitarlo. Alguien sabe?
33
« en: Lunes 19 de Julio de 2010, 11:53 »
buenas:
lo que tu necesitas se llama skinning , tienes ejemplos por internet. Pero grosso modo es que guardes los bones de forma jerarquica junto con los pesos de cada vertice. Despues por cada bone calculas la matriz definitiva y la aplicas sobre todos los vertices multiplicado por el peso del vertice. Eso para hacerla por software, lo que no recomiendo, ya que hay shaders que se encargan de todo.
34
« en: Miércoles 7 de Julio de 2010, 10:45 »
buenas: lo primero, SI, una clase puede ser amiga de una funcion, de hecho es una razon por la que usar friend y no unos buenos getter/setters (aunque NO lo recomiendo), puede ser un asunto de optimizacion de performancia. Que una funcion sea amiga significa que la funcion PUEDE acceder a los miembros y metodos PROTECTED O PRIVATE de la clase. NO que pueda accedera a ellos sin ni siquiera instanciarla!!. La funcion es independiente de la clase, pero inmaginate esto: class Prot { private: int Midatoprivado; };
si hago: void Asigna(Prot * p) { p->Midatoprivado=0; }
el compilador me dirá que no puede acceder al elemento privado. Si hago: class Prot { private: int Midatoprivado; friend void Asigna(Prot * p); };
En cambio si declaro la funcion como amiga, el compilador me dejara ACCESO a los miembros y metodos privados/protected. En tu caso concreto, en la funcion pretendes acceder a una variable que NO EXISTE, no has instanciado la clase, no hay un objeto del que requerir la variable. Sin haber creado un objeto, no puedes acceder a sus miembros no estaticos. Si quieres acceder a la variable, declara STATIC y accede con el contexto por delante (tal y como te expliqué en el post anterior), eso si, los estaticos son UNICOS, mirate el patrón de monoestado en wikipedia. suerte!
35
« en: Miércoles 30 de Junio de 2010, 19:37 »
buenas: Enlace a wikipedia de singleton: http://es.wikipedia.org/wiki/Singletona ver, te pongo un ejemplo de las formas de hacerlo. Cuando tu haces un miembro de una clase "static" este objeto se convierte en algo muy parecido a una global. class PRU { public: static int MiValorGlobal; };
puedes acceder a MiValorGlobal usando el Contexto y luego el miembro. PRU::MiValorGlobal si por ejemplo usaras class SINGLETON { protected: static SINGLETON * Instancia; SINGLETON(); public: static SINGLETON * GetInstance() { if (Instancia==0) Instancia=new SINGLETON(); return Instancia; } };
Si te fijas, no puedo acceder al constructor de la clase. No puedo hacer "new SINGLETON()". Sin embargo, hay un metodo "static" llamado GetInstance y un miembro static llamado Instancia. Si llamo a SINGLETON::GetInstancia() la primera vez, me creará la instancia de la clase en el miembro estatico. El resto de las veces simplemente devolverá el contenido estatico de Instancia. Como esta protected, solo se puede acceder a traves de este metodo, y asi garantizamos que no se usa sin inicializarlo. Ahora bien, cualquier modulo del programa que tenga visibilidad sobre la declaración de la clase podrá acceder a una Instancia unica y global del objeto. Este metodo solo te sirve cuando va a haber un UNICO objeto de este tipo (como CHAL_LAYER, CAPPLICATION, CREGISTRY_CONTROL... etc). Si necesitas multiples instancias de objetos que tengan un miembro o metodo para Threads por ejemplo puedes poner como parametro el puntero al objeto y pasarlo manualmente. class WORKER { public: int WorkerId; void Work(); static void ThreadMethod(void *w) { WORKER * W=(WORKER*)w; W->Work(); } }; BeginThread(WORKER::ThreadMethod,0,(void*)this);
Y para los functors: http://en.wikipedia.org/wiki/Function_object suerte!
36
« en: Miércoles 30 de Junio de 2010, 11:06 »
buenas: es por la convencion de llamadas. Te explico, en C++ hay diferentes convenciones de llamada a la funcion que son stdcall y thiscall la primera es la que se usa en las funciones normales y en los metodos estaticos (que funcionan igual). la segunda es la que se usa en todos los demas métodos de una clase. Al definir como una funcion (void output1(int a)) en Visual Studio el compilador automaticamente la define como stdcall (estandard). Realmente es como si hubieras escrito "void __stdcall output1(int a)" Las funciones standard envian sus parametros a la pila en orden. Pero si la defines como un metodo de clase, se define como thiscall. Los metodos al fin y al cabo son como funciones, la diferencia es que al llamarlos, el compilador automaticamente añade un parametro "extra" que es necesario en la programacion orientada a objetos. La diferencia de estas convenciones de llamada es que las cdecl introducen el parametro "this" en el registro ECX, para tener visibilidad de los miembros y metodos de la clase. Como el parametro adicional no se puede introducir sin un objeto que lo contextualize (ej: cuando haces miObj->UsarMetodo(parametro) ), no se puede usar el metodo directamente como un puntero. Este es un problema tipico de intentar usar un metodo como puntero o como thread. La solucion? a)podrias definir el metodo como estatico y usar singleton (o no usarlo si no necesitas acceso al objeto). b)podrias definirlo como una funcion standard y pasar el this como parametro, en este caso quizas te convenga hacerla friend. c) podrias usar functors (wikipedia) suerte!  PD: editado para explicarlo un poco mejor. PD: reañado , despues de documentarme mejor un segmento de codeproject __cdecl is the default calling convention for C and C++ programs. The advantage of this calling convetion is that it allows functions with a variable number of arguments to be used. The disadvantage is that it creates larger executables. __stdcall is used to call Win32 API functions. It does not allow functions to have a variable number of arguments. __fastcall attempts to put arguments in registers, rather than on the stack, thus making function calls faster. Thiscall calling convention is the default calling convention used by C++ member functions that do not use variable arguments.
37
« en: Miércoles 23 de Junio de 2010, 12:46 »
Buenas: Estoy teniendo problemas para pintar un fondo a un dialogo. Construyo el dialogo con DialogBox. Despues, en el WM_PAINT hago case WM_PAINT: BeginPaint(hWnd,&ps); Canvas->Swap(); EndPaint(hWnd,&ps); return 1;
Canvas->Swap() hace: //------------------------------------------------------------------- // W32CANVAS::Swap /** // Copia el contenido del canvas a la ventana target // // @author Diego Martinez // @version 10/Septiembre/2009 */ //------------------------------------------------------------------- void W32CANVAS::Swap () { RECT WindowSize; GetClientRect ((HWND)this->Target->Get(),&WindowSize); SetStretchBltMode (((W32WINDOW*)this->Target)->hDC,COLORONCOLOR); StretchDIBits (((W32WINDOW*)this->Target)->hDC,0,0,WindowSize.right,WindowSize.bottom, 0, 0, Width, Height, Data,&this->dib, DIB_RGB_COLORS, SRCCOPY); }
Sin embargo, cuando se ejecuta, los controles del dialogo desaparecen y aunque haga InvalidateRect, dejan de verse. Alguien sabe que estoy haciendo mal? Gracias!!
38
« en: Martes 8 de Junio de 2010, 10:19 »
El operador [] no se puede sobrecargar de forma matricial. El operador [] es unario, solo acepta un parametro, por lo tanto, no puedes pasarle más. Para hacer lo que quieres, es mejor que sobrecargues el operador (). El opertador paréntesis si que acepta multiples parametros tal y como quieres hacer DATO * operator ()(int a, int b, int c) { return matrix[a][b][c]; }
39
« en: Miércoles 19 de Mayo de 2010, 15:57 »
si, es exactamente eso lo que queria! muchas gracias!!!
y si, tambien habia pensado en una tabla en la que se guardara el ultimo estado con UPDATE y en la otra hacer un trigger para la inserción historica, pero con esta sentencia me da la lista igual y es eficaz (tiempo 0.05 ).
gracias!
40
« en: Martes 18 de Mayo de 2010, 14:24 »
gracias por la respuesta, pero esa no es lo que busco exactamente.
En esa consulta hay que especificar la mac, y quiero ver todas las macs, quiero algo como.
mac status time
001 RECOGIDO 18-05-10 002 En MOVIMIENTO 16-05-10 003 EN MOVIMIENTO 17-05-10
osea, el listado de cada mac con su ultimo estado. Usando el GROUP BY no me sale la ultima (la que mas fecha tenga).
gracias!
41
« en: Lunes 17 de Mayo de 2010, 21:38 »
Buenas:
perdonad la molestia pero me estoy volviendo un poco loco para hacer una sentencia.
Tengo una tabla con los campos id,time,mac,status.
en ella se meten datos continuamente sobre el estado de unos sensores.
entonces quiero listar el ultimo status para cada mac diferente.
como puedo hacerlo?
gracias!
42
« en: Lunes 10 de Mayo de 2010, 15:33 »
Buenas: tengo Windows 7 y el Visual Studio 2010 instalado en C: y he cargado un proyecto que tenia en D: Cuando lo cargo, el Visual me da un error diciendo que no tiene permiso para acceder a las carpetas, y me lo copia en c:. Os ha pasado? Como puedo autorizar el Vs2010 a usar mi disco D:? gracias!!!  PD: no sabia si poner la question en Visual c++ o en S.O. sorry...
43
« en: Lunes 3 de Mayo de 2010, 17:33 »
gracias por la respuesta su , pero el tener que comprimir antes de subir va a parecer muy aparatoso para mis "usuarios avanzados". La verdad, es que igual acabo programandolo yo  por que esta visto que no encuentro algo que sea plenamente lo que busco. El FTPDrive (es un programa de ftp que se conecta a un servidor creando una unidad mapeada de red y redirigiendo los flujos) estaba muy cerca, pero fallaba con las fechas (comportamiento normal de ftp ya que el comando MTDM no es standard ), y eso es catastrófico en nuestra forma de trabajar (mucho control de fechas). Asi que necesitaria algo como el smb pero mas controlado y encriptado (lo logico seria poner un dominio, pero no puedo hacer que todos se cambien de usuario). Gracias igualmente! a ver si alguien sabe de algun software asi...
44
« en: Jueves 29 de Abril de 2010, 19:23 »
bueno, te paso un link a un tutorial que enseña a usar el win32. http://www.winprog.org/tutorial/Despues de que te lo mires... lo que quieres hacer no necesita que arrastres nada. Realmente, create un form con 1 EDIT y un BUTTON y ya esta. En el WM_COMMAND del BUTTON procedes a hacer la operación.
45
« en: Jueves 29 de Abril de 2010, 14:18 »
pues publica las dudas, y te respondemos si podemos!
agur!
46
« en: Jueves 29 de Abril de 2010, 14:16 »
te explico, por si acaso.
el for tiene 3 elementos
for ( inicialización ; clausula de continuación ; iteración )
El for comenzará haciendo lo que ponga en la Inicializacion nada mas arrancar. Despues si la clausula es TRUE (es cierta) entonces ejecuta el contenido de su bloque. Despues , ejecuta la iteración y vuelve a comprobar si la clausula de continuación es TRUE, y vuelve a ejecutar. Asi sucesivamente.
La clausula por lo tanto es una operación booleana, y por lo tanto se va a comparar si vale 0 o diferente de 0, dando igual que tipo de operación sea.
por ejemplo for (int e=0; IsNotFinished() ; e++) { ... }
si IsNotFinished() devuelve false, entonces se romperia el for.
for (int e=0; array[e]!=' ';e++)
itera el array hasta encontrar el valor ' '.
etc...
47
« en: Martes 27 de Abril de 2010, 21:10 »
Buenas: Era para preguntar si alguien sabe de algun servidor de ficheros que permita: -acceso restringido a carpetas, ficheros segun usuario con autentificación (por ejemplo , los de I+D puedan ver toda la rama de desarrollo, pero los de hardware solo puedan ver la rama de I+D/HW) -subir y bajar ficheros -Encriptado -con diferentes reglas de visibilidad de ficheros segun usuarios. -mantenga la Fecha de creacion modificacion del fichero al pasarlo al server. -logee los accesos. y que preferiblemente: -permita guardar versiones de ficheros -regule el acceso por mac y usuario a ser posible -permite ejecutar scripts, ejecutables sobre el fichero al ser subido. (como por ejemplo un antivirus, mails de control...) -permita un acceso remoto seguro. Para ello he probado a usando FTP sobre SSH, pero perdiamos las fechas al subir ficheros. He probado a usar un Samba en un servidor ubuntu de una maquina virtual pero nos ha dado problemas para configurar los permisos y ademas no nos permitia encriptarlo. No puedo poner Active Directory por que no hay un servidor de dominio y si lo pusiera ademas obligaria a todos a tener que crear un nuevo usuario y seria un lio. Alguna sugerencia? No tiene por que ser un unico programa, puede ser la unión de varios para ello. gracias!
48
« en: Lunes 26 de Abril de 2010, 19:54 »
deberias concretar tu pregunta:
-¿quieres saber como hacer eventos? -¿quieres saber como usar el micro? -¿quieres saber como detectar la subida de volumen?
y tambien di para que plataforma, no es lo mismo unix que win32
49
« en: Lunes 26 de Abril de 2010, 19:52 »
for (int i=0;i=10-1;i++){ for(int j=i+1;j=10;j++){
las clausulas de terminación de estos for's estan mal!, no estas comprobando nada, estas asignando. Creo que querias decir... for (int i=0;i<10-1;i++){ for(int j=i+1;j<10;j++){
Ah, y en el ultimo for, tambien.
50
« en: Miércoles 21 de Abril de 2010, 21:31 »
Páginas: 1 [2] 3 4 ... 12
|
|
|