|
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.
Temas - diego.martinez
76
« en: Domingo 24 de Diciembre de 2006, 22:33 »
Buenas: Es una pregunata mas o menos generica espero. He creado una aplicacion que lee un archivo de texto y lo pasa por un parser que interpreta la informacion desechando ciertas lineas. Cuando tiene una linea valida lo inserta en una base de datos access ODBC. He descubierto que en ciertos ordenadores la aplicacion tarda 3 minutos en digerir un archivo. Y en otro ordenador con identico hardware, la misma aplicacion, tarda 1 HORA!. La pregunta es: existe alguna dll por adjuntar o algun paso intermedio que he ignorado que hace que se prepare el software para ir mas rapido o algo asi? La aplicacion la prepare para que se linkara con todos los contenidos staticos. os muestro lo que hago , aunque realmente es muy basico. Pero quizas he dado por alto alguna cosa. En mi ordenador y algunos otros va excelente, pero en otros va lentisimo. #define WINVER 0x0501 CDatabase Db; CString sFile = "access.mdb"; int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { CString sDsn; CString Sql; CString sDriver = "MICROSOFT ACCESS DRIVER (*.MDB)"; sDsn.Format("ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ=%s",sFile); [...] //________________________ APERTURA DE DATABASE try { Db.Open(NULL,false,false,sDsn); } catch(CDBException* dbError) {[...]} catch(...) {[...]} try { Sql="DELETE * FROM Artek"; Db.ExecuteSQL(Sql); } catch(...) {[...]} [...] //##################################################################################### BUCLE PRINCIPAL CString Insert; MSG Msg; int NumInserts=0; do { if (PeekMessage(&Msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } Sleep(3); //--------------- Leemos Linea memset(Line,'\0',500); n=Log->ReadLine(Line,500); if (n<=0) { Parse_Finished=true;break; } //---------------- Interpretar linea n=0; try{ n=sscanf(Line,"%s %s [%c] : %x\r\n",Date,Time,&Byte,&Hex); }catch(...){ continue; } //--------------- Insertar Linea si es valida if (n!=4) {[...]} else { Hex=Hex&0x000000FF; if (Hex<0xFE) { if (Hex>=0x80) { Hex-=0x80; Id_Obra=(int)Hex; try{ if (Id_Obra<Registro.Obras.size() && Id_Obra>=0) sprintf(Obra_Nombre,"%s",Registro.Obras[Id_Obra].nombre); } catch(...) {[...]} if (Registro.Obras[Id_Obra].Tipo!=-1) //si no esta desactivada if (!(strcmp(Obra_Nombre,LastObra_Nombre)==0 && strcmp(Date,LastDate)==0 && strcmp(Time,LastTime)==0)) { try{ strcpy(LastObra_Nombre,Obra_Nombre); //----- si es la misma que la ultima incluso en el segundo strcpy(LastDate,Date); //------ Ignorar strcpy(LastTime,Time); } catch(...) {[...]} try { //! aqui esta la insercion Sql.Format("INSERT INTO Artek Id_Alarma,Id_Obra,Nombre_Obra,Fecha,Hora) VALUES (%d,%d,'%s','%s','%s')",ID++,Id_Obra,Obra_Nombre,Date,Time); Db.ExecuteSQL(Sql); //---- la metemos en el Access Sql=""; } catch(CDBException * dbError) {[...] } catch(...) {[...] } } } } } }while(Parse_Finished==0); //##################################################################################### //_____________________________________________________________________________________________ Cerrar ACCESS Log->Close(); Db.Close(); [... limpieza de otras cosas ...] }
Espero que no sea mucha molestia de codigo, he eliminado todo lo no relacionado con la base de datos. Es solo saber si hay algun paso para preparar la database o alguna cosa que hago mal que hace ese comportamiento. Muchas gracias por anticipado por vuestro tiempo.
77
« en: Jueves 30 de Noviembre de 2006, 18:08 »
Buenas:
Estoy intentando hacer un gestor de errores del codigo, y me preguntaba, (no se si estoy preguntando una burrada):
hay alguna forma de accesar el contenido de la pila de llamadas (call stack), tal que al llamar a una funcion me indique por que funciones ha pasado?
un ejemplo de lo que querria seria:
void func1() { func2(); }
void func2() { func3(); } void func3() { escribe_pila(); }
y el resultado :
xxxx:xxxx func3 xxxx:xxxx func2 xxxx:xxxx func1
ya se que seguramente tendria que hacer una tabla con pseudonimos para las direcciones de las funciones y comparar las direcciones de la pila con la tabla para identificarlas, pero ¿es posible acceder a la pila?. Inmagino que acceder a ella tendra el problema intrinseco de afectar a la propia pila en la llamada...
pd: gracias por adelantado como siempre
78
« en: Martes 3 de Octubre de 2006, 16:48 »
Buenas: Ultimamente me ha aparacido un fallo muy curioso, tengo una aplicacion en visual c++ para windows xp que lee del puerto rs232 o usb con conversor usando el CreateFile("//.////COM1",...); siempre me ha funcionado bien sin ningun problema, sin embargo, en un par de ordenadores en concreto (de la misma organización) siempre que leen , leen 7F (127, caracter DEL) independientemente del byte que se transmita. Antes de leer, (que leo con ReadFile) me aseguro de asignar buffer de lectura, configuracion de Bits, parada y etc , y de establecer los timeouts. Todos ellos parece que pasan sin problemas, puesto que si no mostrarian mensaje de error. Esto ocurre tanto con cable como con adaptador usb , asi pues tengo la sospecha de que quizas sea un problema de la configuracion de permisos del ordenador, es esto posible?? Si el administrador impide la lectura de puerto serie, recibe siempre 7f?
79
« en: Viernes 15 de Septiembre de 2006, 17:47 »
Buenas:
En estos momentos estoy intentando programar una aplicación que envie un archivo de texto simple , algo como "alarma! alarma!" a un movil empleando una conexion via bluetooth con un adaptador.
Supuestamente para esto lo mas adecuado seria enviar un OBEX.
Tengo ya un programa que busca los dispositivos bluetooth. Pero no se como hacer para establecer la conexión y enviar la trama.
Estoy usando Windows Sockets 2 y Visual Studio 2003 con el sdk de sp2.
Alguien sabe de algun tutorial o cacho de codigo sencillito?
80
« en: Miércoles 23 de Agosto de 2006, 15:18 »
Buenas:
Pues eso, no entiendo que hago mal en este segmento de codigo. La verdad es que esta cortapegado de otra aplicacion en la que si funciona, asi que mas que cual es el fallo en el codigo , la pregunta seria ¿que puede provocar que CreateWindowEx provoque excepcion asi?
El debug me da "Damage After Normal Block", supongo que es un puntero desviado?
appWINDOW::appWINDOW() { HINSTANCE hInstance = GetModuleHandle(NULL); // Grab An Instance For Our Window
//Step 1: Registering the Window Class wc.cbSize = sizeof(WNDCLASSEX); //siempre es sizeof(wndclassex); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = NULL; wc.hbrBackground = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = "Prueba"; wc.hIconSm = NULL;
RegisterClassEx(&wc);
hWnd = CreateWindowEx( WS_EX_CLIENTEDGE, "Prueba", //es el lpszClassName de la ClassEx registrada para que sepa como es el master "Prueba de dialogos", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInstance, NULL); <------------------- Excepcion aqui ... }
gracias de antemano.
81
« en: Lunes 21 de Agosto de 2006, 15:02 »
Buenas: tengo un main en el que tengo #include <init.h> void main (void) { Init(); }
y init.h es: void Init(); void InitAlarm(); void AlarmFunc(void *);
e init.c es: #include <init.h> #include <windows.h> #include <appConfig.h> #include <global.h> #include <definitions.h> #include <resource.h> #include <wndproc.h> #include <process.h> void Init(void) { AppConfig(); hfuente = CreateFont(...); //fuente //----------------------- Common Controls InitCommonControls(); //---------------------------------- Abrimos el archivo de entrada de datos if (app.DataIncome==DATA_INCOME_FILE) InitFileIncome(); InitAlarm(); }
bien: el problema es que me da al compilar: main.obj : error LNK2001: unresolved external symbol "void __cdecl Init(void)" (?Init@@YAXXZ) Debug/MARCH.exe : fatal error LNK1120: 1 unresolved externals y no entiendo a que se debe, en el main llamo a <init.h> en init.h prototipizo la funcion Init() y en el init.c la defino. Alguien puede explicarme a que puede deberse?  gracias por anticipado.
82
« en: Lunes 12 de Junio de 2006, 18:16 »
Se genera alguna notificacion WIN32 cuando una ventana pasa por encima de otra? gracias
83
« en: Viernes 2 de Junio de 2006, 19:26 »
Pues eso, tras buscar en la red formatos graficos me encuentro que todos tienen sus licencias y sus propietariedades.
Disculpad si es una pregunta tonta, pero existe algun formato realmente libre?.
84
« en: Miércoles 31 de Mayo de 2006, 15:54 »
Buenas: Tengo un ListView en el cual hay unos items que se borran. La cosa es , como puedo hacer para seleccionar el siguiente item cuando se borra uno? Actualmente, cuando borras el item seleccionado simplemente deja de haber ninguno seleccionado.
85
« en: Lunes 22 de Mayo de 2006, 16:48 »
Buenas:
Soy nuevo en este foro. Estoy creando una aplicacion que cuando recibe una alarma muestra una ventana con una serie de imagenes. Para ello tengo un Procedure de Ventana que se encarga de mostrar dichas imagenes en un DialogBox que llamo insertandole parametros con el lParam.
Bien, ese lParam es un struct con todos los datos que debo mostrar. El dialogo funciona correctamente.
Pero al mostrar un nuevo dialogo, al enviarse Mensajes de Paint o de otro tipo, TODOS los dialogos se redibujan IGUAL QUE EL ULTIMO.
Estoy buscando una solucion a esto pero siempre se agradece una ayuda, muchas gracias. Espero poder colaborar yo tambien. Hasta la proxima.
|
|
|