Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
bueno hilo seria un objeto y no una funcion ¿Me estas diciendo que hacerlo global seria la mejor solucion?
Responder Con Cita
  #2  
Antiguo 30-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Bueno lo he conseguido pero no se si es muy ortodoxo o no. Lo que he hecho es esto:
En TInt.h:
Código:
#ifndef Inth
#define Inth
//---------------------------------------------------------------------------

#include "THilo.h"

//---------------------------------------------------------------------------

//Declaracion de la clase
class TInt
{
        public:
                TInt(THilo *H);
                ~TInt();

                AnsiString __fastcall toHex(int value);
                AnsiString __fastcall toBin(int value);

        private:
                THilo *Hilo;

};
//---------------------------------------------------------------------------
#endif
En el TInt.cpp tengo esto:
Código:
#include "TInt.h"

TInt::TInt(THilo *H)
{
        Hilo = H;
}
//---------------------------------------------------------------------------

AnsiString __fastcall TInt::toHex(int value)
{
        AnsiString retval = "";
        __try{
                if(Hilo != NULL)
                        retval = Hilo->FuncToHex(value);
        }catch(...){
        }
        return retval;
}
//---------------------------------------------------------------------------

AnsiString __fastcall TInt::toBin(int value)
{
        AnsiString retval = "";
        __try{
                if(Hilo != NULL)
                        retval = Hilo->FuncToBin(value);
        }catch(...){
        }
        return retval;
}
En el TPrueba.h tengo esto:
Código:
#include <vcl.h>

#ifndef PRUEBAH
#define PRUEBAH
#include "TInt.h"

   class TPrueba
   {
        public:
         TPrueba();
                ~TPrueba();
                void __fastcall IniciarHilo(void);
                TInt *Int;

        private:
                THilo *Hilo;

   };
#endif
En el TPrueba.cpp tengo esto:
Código:
TPrueba::TPrueba()
{

}
//---------------------------------------------------------------------------

TPrueba::~TPrueba()
{
        delete Int;
        Int = NULL;
}
//---------------------------------------------------------------------------

void __fastcall TPrueba::IniciarHilo(void)
{
    //Creo el hilo
        Hilo = new THilo(true);

        if(Hilo == NULL)
        {
                MessageBox(Application->Handle,
                           "No se ha podido crear el hilo correctamente.\n Cierre la aplicación e intentelo de nuevo.",
                           "Error",
                           MB_OK | MB_ICONERROR | MB_APPLMODAL);
        }
        else{
                //Creo la otra clase
                Int = new TInt(Hilo);
        }
}
y en el Unit1.cpp tengo esto:
Código:
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        try{
        prueba  = new TPrueba();

    }
    catch(...){
    }
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ShowMessage(prueba->Int->toHex(100));
        ShowMessage(prueba->Int->toBin(100));
}
Hilo no hace falta que lo ponga aquí porque el problema era acceder a el desde otra clase donde no estaba declarado y asi lo he podido solucionar ¿que os parece esta solucion? ¿chapuza? ¿correcta?
Responder Con Cita
  #3  
Antiguo 30-06-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Sin conocer cual es el problema a resolver es muy difícil aconsejarte sobre como dar una solución orientada a objetos.

No indicas nada de Hilo, supongo que se destruye bien.
Sólo en las clases derivadas de VCL deben crearse los objetos como punteros. C++ puede crear objetos con sólo declararlos lo que es más sencillo y directo pero precisan que escribas un constructor por defecto o pases los parámetros apropiados. Por ejemplo:

Código:
THilo *Hilo = new THilo(true)
TInt Int(Hilo);
ó

Código:
TInt Int(new THilo(true));
La el diseño de las clases depende del problema a resolver y las perspectivas de reutilización de código.
Un mal diseño hará que el código sea poco eficiente y difícil de entender y depurar. En este sentido no puedo decirte si es la mejor solución a tu problema, o al menos lo que yo haría, que no tiene por que ser mejor que tu solución.

Saludos.
Responder Con Cita
  #4  
Antiguo 30-06-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
THilo es del tipo TThread y es creado y destruido correctamente. Otra cosa ¿Existe alguna herramienta que conozca que te indique si tiene fallos como que uses new y luego no lo destruyas con delete? Creo que alguien hizo una herramienta que hacia algo asi sobr el binario aunque no lo probé.
Responder Con Cita
  #5  
Antiguo 30-06-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Memory leak.

En el foro se ha hablado del tema.

Saludos.
Responder Con Cita
  #6  
Antiguo 01-07-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
lo unico que encontré en el foro fue esto: http://www.clubdelphi.com/foros/show...ghlight=fastmm y es sobre delphi. Tengo entendido por lo que he podido leer que fastmm funciona en builder pero estoy buscando informacion al respecto de esas aopciones que hablan pero en español no encuentro nada. Tambien he visto que se habla de codeguard pero tampoco lo veo nada claro y nada en español.
Responder Con Cita
  #7  
Antiguo 01-07-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Capturar un memory leak


Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar mi clase a una clase de 3 capas o lo mas parecido elarys OOP 2 07-04-2011 23:02:54
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
Es posible hacer una nueva clase de componente ?? ilichhernandez OOP 7 05-05-2008 16:01:30
Clase jakuna OOP 2 30-08-2007 21:50:35
Clase para hacer ABM mateamargo OOP 3 25-10-2005 22:34:23


La franja horaria es GMT +2. Ahora son las 06:54:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi