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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con temporizador en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con temporizador en C++  (Leído 13,987 veces)
SrCooper

Desconectado Desconectado

Mensajes: 137


Bazinga!


Ver Perfil
Duda con temporizador en C++
« en: 7 Julio 2013, 00:13 am »

Buenas, estoy haciendo un videojuego en C++ con allegro, y me gustaría ejecutar una función 3 segundos después de que se haya ejecutado otra. (Es decir ejecutar una función, esperar tres segundos, y ejecutar la otra.)

No quiero usar la función rest(3000), porque esto ralentiza el juego al estar ejecutandose en un bucle while.
Quisiera saber si hay alguna libreria o algún truco que me sirva. He buscado en google un poco, pero no encuentro mi problema en particular.

Un saludo y gracias de antemano ;D


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #1 en: 7 Julio 2013, 00:16 am »

¿Te refieres a una función que se ejecute cada 3 segundos?


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
SrCooper

Desconectado Desconectado

Mensajes: 137


Bazinga!


Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #2 en: 7 Julio 2013, 00:25 am »

¿Te refieres a una función que se ejecute cada 3 segundos?

Ya encontré como hacer eso, pero no es a lo que me refiero. Lo que me gustaría es algo como así:
Código
  1. void funcion_principal(){
  2.       funcion1();
  3.       esperar(3);
  4.       funcion2();
  5. }

Y luego en el main poder llamar a "funcion_principal" y que esta se ejecute en ese orden y con ese tiempo. No se si me explico... :xD
Un saludo
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #3 en: 7 Julio 2013, 00:29 am »

Y luego en el main poder llamar a "funcion_principal" y que esta se ejecute en ese orden y con ese tiempo. No se si me explico... :xD
Pues no xD.

Aver, main llama a funcion_principal(). En funcion_principal() llama a funcion1(), espera 3 segundos y después llama a funcion2().

Si es eso, solo tendrías que poner rest(3000), si no es eso entonces no te entiendo... A no ser que quieras que la función y el main se ejecuten al mismo tiempo (¿Es eso?)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
SrCooper

Desconectado Desconectado

Mensajes: 137


Bazinga!


Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #4 en: 7 Julio 2013, 00:46 am »

Pues no xD.

Aver, main llama a funcion_principal(). En funcion_principal() llama a funcion1(), espera 3 segundos y después llama a funcion2().

Si es eso, solo tendrías que poner rest(3000), si no es eso entonces no te entiendo... A no ser que quieras que la función y el main se ejecuten al mismo tiempo (¿Es eso?)

Exacto, lo has entendido perfectamente. Es justo eso lo que quiero que haga, pero NO puedo usar el rest porque entonces se para TODO el juego y yo solo quiero que se pare esa función.

Mi idea es que mientras se esperan 3 segundos el while se ejecute normalmente las veces que haga falta y cuando haya pasado el tiempo se ejecute funcion2.

Un saludo
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #5 en: 7 Julio 2013, 01:02 am »

Es decir, una tarea en segundo plano.

Pues la manera más sencilla (relativamente) es usando threads (hilos). C++ tiene una clase para threads pero es relativamente nueva (no todos los compiladores están actualizados con ella).

Asi que te hago un ejemplo con las Windows API:

Código
  1. #include <winalleg.h>
  2.  
  3.  
  4. DWORD WINAPI Funcion( LPVOID lpParam )
  5. {
  6.  Funcion1();
  7.  rest(3000);
  8.  Funcion2();
  9. }
  10.  
  11. int main()
  12. {
  13.   //...
  14.   CreateThread(NULL,0,Funcion,NULL, 0,NULL);  
  15.  
  16.  while(!key[KEY_ESC] && !choque )
  17.  {{/code]
« Última modificación: 7 Julio 2013, 01:04 am por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
SrCooper

Desconectado Desconectado

Mensajes: 137


Bazinga!


Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #6 en: 7 Julio 2013, 01:10 am »

Vale, entonces cuando en el while yo ejecute Funcion, esta se ejecutará automáticamente en segundo plano, ¿no?

La verdad es que no entiendo muy bien todo eso de DWORD, LPVOID y lpParam. ¿Qué significan exactamente?

Ya verás, ahora con esto mi juego del Snake va a mejorar mucho xDD
Un saludo y gracias :D
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #7 en: 7 Julio 2013, 01:14 am »

Vale, entonces cuando en el while yo ejecute Funcion, esta se ejecutará automáticamente en segundo plano, ¿no?
Desde el momento de CreateThread, se ejecutarán en segundo plano.

La verdad es que no entiendo muy bien todo eso de DWORD, LPVOID y lpParam. ¿Qué significan exactamente?
Son expresiones que se han inventado los de microsoft... Son tan especialitos, su equivalencia es la siguiente:

DWORD = unsigned int
LPVOID = void*

Y lpParam es el nombre que le he puesto al parámetro de la función (se le puede pasar un parámetro al hilo), también le podría haber puesto "habichuelas".

Te recomiendo que hagas algunas prácticas con hilos... Si tienes linux mejor (ahí tienes la librería pthread que es más fácil que Windows API).
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #8 en: 7 Julio 2013, 01:19 am »

Desde el momento de CreateThread, se ejecutarán en segundo plano.
Una nota sobre esto, cuando la función del hilo termine también terminará la tarea.

Si quieres que se repita continuamente tendrías que poner un while:

Código
  1. DWORD WINAPI Funcion( LPVOID lpParam )
  2. {
  3.  while(true)
  4.  {
  5.      Funcion1();
  6.      rest(3000);
  7.      Funcion2();
  8.  }
  9. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
SrCooper

Desconectado Desconectado

Mensajes: 137


Bazinga!


Ver Perfil
Re: Duda con temporizador en C++
« Respuesta #9 en: 7 Julio 2013, 01:23 am »

Te recomiendo que hagas algunas prácticas con hilos... Si tienes linux mejor (ahí tienes la librería pthread que es más fácil que Windows API).

Eso voy a hacer la verdad, porque es la primer vez que oigo de su existencia y me podrían ser muy útiles. Sí, tengo linux, pero por alguna razón no me funciona bien allegro así que utilizaré windows.
Un saludo y gracias por todo :P

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[MOD] Assemebler Temporizador
Electrónica
julyos 0 2,254 Último mensaje 20 Junio 2005, 02:16 am
por julyos
Temporizador en BATCH
Scripting
zhynar_X 8 14,738 Último mensaje 8 Mayo 2007, 15:34 pm
por nhaalclkiemr
Temporizador
Programación C/C++
Bledniss 4 5,207 Último mensaje 29 Abril 2011, 03:39 am
por Destro-
Temporizador en C
Programación C/C++
PeKiN 2 5,692 Último mensaje 9 Junio 2011, 21:51 pm
por PeKiN
temporizador
PHP
kakashi20 1 2,975 Último mensaje 15 Marzo 2012, 19:31 pm
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines