elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  clase contador con SeTTimer
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: clase contador con SeTTimer  (Leído 3,315 veces)
d2011hacker

Desconectado Desconectado

Mensajes: 1


Ver Perfil
clase contador con SeTTimer
« en: 24 Junio 2011, 00:18 am »

esta clase la hice para unas tareas redundantes para una presentasion, necesitaba un contador. el tema es que al principio no se puede compilar el codigo, pero despues compila pero no funciona. mi clase contador se sentra en la funcion SetTimer de windows. pongo todo el codigo, quisiera que me ayuden a modificarla para que ande correctamente.

Código:

/*
Clase Contador por WDR
UTN
*/

class Contador
{

public:
Contador()
{
terminado=false;
}

       static void EnTiempo(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc)
       {
                //terminado=true;
                cout << "TEST: callback llamada" << endl;
       }

void Temporizador(void)
{
SetTimer(NULL,1,milisegundos, (TIMERPROC) Contador::EnTiempo);
}

void setMilisegundos(int ms)
{
milisegundos=ms;
}

void setSegundos(int s)
{
milisegundos=(s*1000);
}

bool Finalizado()
{
return terminado;
}

private:
bool terminado;
int milisegundos;
};


Código:
int main()
{
    Contador c;
    c.setSegundos(30);
    c.Temporizador();

    system("PAUSE");

    return 0;
}

Esto compila pero no anda, como se ve al terminar el tiempo deberia llamar a esa funcion de callback que es metodo de la clase. notese que tube que poner un cout para saber si era llamada la callback, pero para que compile tube que ponerla static. yo en verdad lo que quiero no es poner un cout sino que cambie el valor del flag "terminado". Aparte de eso ni siquiera anda. Agradezco la ayuda




« Última modificación: 24 Junio 2011, 00:25 am por d2011hacker » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: clase contador con SeTTimer
« Respuesta #1 en: 24 Junio 2011, 01:59 am »

lo que pasa es que nesesitas "Despachar" los mensajes de windows... agrega el siguiente codigo y llamalo antes del return ( Antes de la finalizacion del proceso Main() )

Código
  1.  
  2. VOID ProcessMessages()
  3. {
  4.    MSG msg;
  5.    while (GetMessage(&msg, NULL, NULL, NULL) != -1)
  6.        DispatchMessage(&msg);
  7. }
  8.  
  9.  

por si quieres un ejemplo mas concreto:

http://foro.elhacker.net/programacion_cc/src_lineas_aleatorias_en_la_pantalla-t313040.0.html

Por otro lado para cambiar la velocidad del timer debes realizarle un KillTimer() y despues un SetTimer, tambien debes realizar un KillTimer() en el destructor de la clase...

Por otro lado el Callback deberias hacerlo fuera de la clase, de tal forma dicho callback se cargara N cantidad de veces sean requeridas es decir N clases Corriento ( Con el Timer ensendido ) = N copias del callback en memoria.

de igual manera cada clase deberia tener un ID unico para cada timer, es decir vas a tener que crear una coleccion de id para saber que id's puedes usar... por hay en esa clase SIEMPRE USAS EL ID 1 por lo tanto no importa cuantas clases cargues SIEMPRE manejaran 1 solo Timer.

Dulces Lunas!¡.


« Última modificación: 24 Junio 2011, 02:11 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
se puede dar herencia de una clase anidada a una clase normal.
Java
kev4142 0 3,406 Último mensaje 7 Agosto 2009, 20:46 pm
por kev4142
Problema de interacion entre una clase Interfaz y la clase que la llama
Java
yeah69 4 4,508 Último mensaje 21 Mayo 2010, 06:30 am
por we4rt
Diferencia de instancia (CLASE oObjeto; y CLASE *oObjeto = new CLASE();)
Programación C/C++
ahkbar87 2 2,785 Último mensaje 14 Junio 2011, 23:17 pm
por Don Pollo
API SetTimer sin ventana con un ciclo infinito
ASM
YagamiIori2002 2 3,643 Último mensaje 15 Octubre 2011, 16:30 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines