Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Timers y objetos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Timers y objetos Responder citando

A ver si alguien me puede hechar una mano:

Quiero hacer un temporizador de la siguiente manera:
timerID = SetTimer(NULL, 0, 60000, (TIMERPROC) funcion_timer);

funcion_timer es la función que se ejecuta cuando salte el timer.

De esta manera funciona bien, pero si funcion_timer es un metodo definido en un objeto no hay manera de hacerlo funcionar, me da el error :
E2235 Member function must be called or its address taken.

gracias.

Volver arriba
Mensaje    Asunto: Timers y objetos Responder citando

Hola 'paisano':

Puedes declarar la función dentro de la clase como estática, esto hará que para todas las instancias de la misma clase solo exista una vez el método, pero esta es la forma más simple de usar funciones de una clase como CALLBACK.

Por ejemplo, tenemos un proyecto nuevo vacio con todos los nombres por defecto:

en la parte privada de la clase del Form por ejemplo, declaramos:

...
private:
  static void CALLBACK FuncionTimer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime);
...

en el .cpp:
//-----
void CALLBACK TForm1::FuncionTimer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
    // Usamos 'idEvent' para recibir la referencia a la clase y hacemos un casting para poder usarlo como 'frm'
    static int i =0;
    TForm1* frm = reinterpret_cast<TForm1*>(idEvent);
    if(frm)
        frm->Caption = i++;
}
//-----


para activar el timer, por ejemplo en el constructor del Form:

  UINT timerID;
  timerID = SetTimer(Handle, (int)this, 60000,
                 reinterpret_cast<TIMERPROC>(FuncionTimer));


También podrías usar la clase TTimer quizás mas sencillo, aunque supongo que esto ya lo sabes o bien el mismo SetTimer sin especificar una función, esto hará que se dispare cada vez el evento WM_TIMER que podrías capturar.

Saludos.
_Leo

Volver arriba
Mensaje    Asunto: Timers y objetos Responder citando

Gracias Leo, ahora mismo lo pruebo.

El TTimer si lo conozco, pero no lo quiero utilizar. Lo estaba utilizando en el programa pero despues de unas 30 horas de funcionamiento me salia un error EAccessViolation precisamente en la funcion que se ejecutaba cuando se cumplia el timer.

Tampoco he utilizado SetTimer sin poner una función de manera, que me envie un evento, porque no se luego como tratar ese evento. Builder implementa el tratamiento de eventos de una manera que no se como acceder.

El objetivo de todo esto es hacer una clase que luego pueda utilizar en cualquier programa. La clase lo único que tiene que hacer es ejecutar una funcion cada determinado intervalo de tiempo.

Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.