• Domingo 6 de Julio de 2025, 08:08

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.


Temas - diego.martinez

Páginas: 1 2 3 [4]
76
Visual C++ / Acelerar Procesamiento Cdatabase
« 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.


Código: Text
  1.  
  2.  
  3. #define WINVER 0x0501
  4. CDatabase Db;
  5. CString sFile = "access.mdb";
  6.  
  7. int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  8. {
  9.    CString sDsn;
  10.    CString Sql;
  11.    CString sDriver = "MICROSOFT ACCESS DRIVER (*.MDB)";
  12.    sDsn.Format("ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ=%s",sFile);
  13.  
  14.    [...]  
  15. //________________________ APERTURA DE DATABASE
  16. try
  17. {
  18.    Db.Open(NULL,false,false,sDsn);
  19. }
  20. catch(CDBException* dbError)
  21. {[...]}
  22. catch(...)
  23. {[...]}
  24. try
  25. {
  26.    Sql="DELETE * FROM Artek";
  27.    Db.ExecuteSQL(Sql);
  28. }
  29. catch(...)
  30. {[...]}
  31.  
  32.  
  33.  [...]
  34.  
  35.    //##################################################################################### BUCLE PRINCIPAL
  36.  
  37.    CString Insert;
  38.    MSG Msg;
  39.  
  40.    int NumInserts=0;
  41.  
  42.    do
  43.    {
  44.        if (PeekMessage(&Msg,NULL,0,0,PM_REMOVE))
  45.        {
  46.        TranslateMessage(&Msg);
  47.        DispatchMessage(&Msg);
  48.        }
  49.  
  50.        Sleep(3);
  51.  
  52.                                    //--------------- Leemos Linea
  53.        memset(Line,'\0',500);
  54.        n=Log->ReadLine(Line,500);              
  55.  
  56.  if (n<=0)
  57.            { Parse_Finished=true;break; }
  58.                            //---------------- Interpretar linea
  59.            n=0;
  60.            try{
  61.            n=sscanf(Line,"%s %s [%c] : %x\r\n",Date,Time,&Byte,&Hex);
  62.            }catch(...){           continue;         }
  63.                            //--------------- Insertar Linea si es valida
  64.            if (n!=4)
  65.            {[...]}
  66.            else
  67.            {
  68.            Hex=Hex&0x000000FF;
  69.            if (Hex<0xFE)
  70.            {                               if (Hex>=0x80)
  71.                {
  72.                Hex-=0x80;
  73.                Id_Obra=(int)Hex;
  74.                               try{
  75.                  if (Id_Obra<Registro.Obras.size() && Id_Obra>=0)
  76.                   sprintf(Obra_Nombre,"%s",Registro.Obras[Id_Obra].nombre);                                            }
  77.                    catch(...)
  78.                    {[...]}
  79.  
  80.                    if (Registro.Obras[Id_Obra].Tipo!=-1) //si no esta desactivada
  81.                    if (!(strcmp(Obra_Nombre,LastObra_Nombre)==0 && strcmp(Date,LastDate)==0 && strcmp(Time,LastTime)==0))
  82.                    {
  83.                    try{
  84.                        strcpy(LastObra_Nombre,Obra_Nombre); //----- si es la misma que la ultima incluso en el segundo
  85.                        strcpy(LastDate,Date);                //------ Ignorar
  86.                        strcpy(LastTime,Time);
  87.                        }
  88.                    catch(...)
  89.                        {[...]}
  90.  
  91.                       try
  92.                        {
  93.  
  94. //! aqui esta la insercion
  95.  
  96.                        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);
  97.                        Db.ExecuteSQL(Sql);        //---- la metemos en el Access
  98.                        Sql="";
  99.  
  100.                        }
  101.                    catch(CDBException * dbError)
  102.                        {[...] }
  103.                    catch(...)
  104.                        {[...] }
  105.                    }                                   }
  106.            }
  107.        }
  108.  
  109.    }while(Parse_Finished==0);
  110.  
  111.  
  112. //#####################################################################################
  113.  
  114. //_____________________________________________________________________________________________ Cerrar ACCESS
  115.    Log->Close();
  116.    Db.Close();
  117.  
  118. [... limpieza de otras cosas ...]
  119. }
  120.  
  121.  
  122.  


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
Visual C++ / Pila De Llamadas / Call Stack
« 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
Visual C++ / Error 7f De Rs232
« 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?    :blink:

79
Visual C++ / Bluetooth
« 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
Visual C++ / Fallo Al Crear Ventana
« 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
Visual C++ / Fallo De Linkado Que No Comprendo
« en: Lunes 21 de Agosto de 2006, 15:02 »
Buenas:

tengo un main en el que tengo

Código: Text
  1.  
  2. #include &#60;init.h&#62;
  3. void main (void)
  4. {
  5.   Init();
  6. }
  7.  
  8.  

y init.h es:

Código: Text
  1.  
  2. void Init();
  3. void InitAlarm();
  4. void AlarmFunc(void *);
  5.  
  6.  

e init.c es:

Código: Text
  1.  
  2. #include &#60;init.h&#62;
  3. #include &#60;windows.h&#62;
  4. #include &#60;appConfig.h&#62;
  5. #include &#60;global.h&#62;
  6. #include &#60;definitions.h&#62;
  7. #include &#60;resource.h&#62;
  8. #include &#60;wndproc.h&#62;
  9. #include &#60;process.h&#62;
  10.  
  11.  
  12.  
  13. void Init(void)
  14. {
  15.   AppConfig();
  16.   hfuente = CreateFont(...);  //fuente
  17.  
  18.   //----------------------- Common Controls
  19.   InitCommonControls();
  20.  
  21.   //---------------------------------- Abrimos el archivo de entrada de datos
  22.   if (app.DataIncome==DATA_INCOME_FILE)
  23.     InitFileIncome();
  24.  
  25.   InitAlarm();
  26. }
  27.  
  28.  
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?   :blink:  gracias por anticipado.

82
Visual C++ / Redibujar Cuando Una Ventana Pasa Por Encima
« en: Lunes 12 de Junio de 2006, 18:16 »
Se genera alguna notificacion WIN32 cuando una ventana pasa por encima de otra?
gracias

83
Visual C++ / Existe Algun Formato Grafico Realmente Libre?
« 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
Visual C++ / Re: Forzar La Seleccion De Un Item En Un List View
« 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.   :huh:

85
Visual C++ / Conflicto Con El Wndproc
« 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.

Páginas: 1 2 3 [4]