Autor
|
Tema: Duda con temporizador en C++ (Leído 13,961 veces)
|
SrCooper
Desconectado
Mensajes: 137
Bazinga!
|
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
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
¿Te refieres a una función que se ejecute cada 3 segundos?
|
|
|
En línea
|
|
|
|
SrCooper
Desconectado
Mensajes: 137
Bazinga!
|
¿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í: void funcion_principal(){ funcion1(); esperar(3); funcion2(); }
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... Un saludo
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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... 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
|
|
|
|
SrCooper
Desconectado
Mensajes: 137
Bazinga!
|
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
Mensajes: 1.211
|
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: #include <winalleg.h> DWORD WINAPI Funcion( LPVOID lpParam ) { Funcion1(); rest(3000); Funcion2(); } int main() { //... CreateThread(NULL,0,Funcion,NULL, 0,NULL); while(!key[KEY_ESC] && !choque ) {{/code]
|
|
« Última modificación: 7 Julio 2013, 01:04 am por amchacon »
|
En línea
|
|
|
|
SrCooper
Desconectado
Mensajes: 137
Bazinga!
|
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
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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: DWORD WINAPI Funcion( LPVOID lpParam ) { while(true) { Funcion1(); rest(3000); Funcion2(); } }
|
|
|
En línea
|
|
|
|
SrCooper
Desconectado
Mensajes: 137
Bazinga!
|
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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[MOD] Assemebler Temporizador
Electrónica
|
julyos
|
0
|
2,250
|
20 Junio 2005, 02:16 am
por julyos
|
|
|
Temporizador en BATCH
Scripting
|
zhynar_X
|
8
|
14,719
|
8 Mayo 2007, 15:34 pm
por nhaalclkiemr
|
|
|
Temporizador
Programación C/C++
|
Bledniss
|
4
|
5,194
|
29 Abril 2011, 03:39 am
por Destro-
|
|
|
Temporizador en C
Programación C/C++
|
PeKiN
|
2
|
5,682
|
9 Junio 2011, 21:51 pm
por PeKiN
|
|
|
temporizador
PHP
|
kakashi20
|
1
|
2,967
|
15 Marzo 2012, 19:31 pm
por #!drvy
|
|