Página 1 de 1

Pausar y reanudar timers

Publicado: 30 Dic 2009, 14:10
por Jonny
Hola

Resulta, que quiero hacer que cuando la ventana de un programa no está activa, se pause un timer (no pararlo), hasta que se enfoque nuévamente la ventana del programa, y el timer continúe.
Pensaba que habrían funciones como timer_pausetimer() y timer_resumetimer() para esto, pero cual es mi sorpresa, que al mirar en la librería de timers... no están estas funciones.
entonces, la pregunta (un tanto chunga) por lo que supone ya que esa librería se basa en las apis de windows, es, si sabeis primero si existe apis para eso (quizá no están las funciones porque las apis de windows no contemplan estas funciones) y de existir las apis para ello ... ¿sabeis como van?...
Se me ocurre una forma chapucera de hacerlo, y sería almacenando el tiempo transcurrido desde que se inicia el timer hasta que se desenfoca la ventana, y cuando esta no está activa parar por completo el timer e iniciarlo nuévamente cuando la ventana vuelve a estar activa, pero con el tiempo restante hasta el total...
Pero si hubiera alguna forma más normalita mejor jejeje.

Salu2!

Re: Pausar y reanudar timers

Publicado: 30 Dic 2009, 14:55
por Ximorro
Desde luego si miras "Timers.au3" se ve claramente que usa la API en user32.dll para timers del sistema, aunque desconozco si hay mecanismos de pausa.

Tal como está la udf sólo se me ocurre que acompañes cada _Timer_SetTimer con un _Timer_Init. Cuando la ventana se desactive te cargas los timers pero guardas el tiempo que llevaban usando _Timer_Diff con los correspondientes timestamp recogidos de los _Timer_Init.
Al reactivar la ventana toca recrear los timers con el tiempo restante, es decir, el tiempo en la creación original menos el que te ha dado _Timer_Diff.

Sí, es un poco rollo, a ver si alguien te puede dar más información de la API, aunque efectivamente sería raro que existieran pausas y no las hubieran puesto en la udf. Otra posibilidad es que haya una función para preguntarle a un timer cuánto tiempo le queda para saltar, en ese caso te ahorrarías las llamadas a _Timer_Init/_Timer_Diff

Re: Pausar y reanudar timers

Publicado: 30 Dic 2009, 17:16
por Jonny
Hola

yo, así por encima, he buscado en google cosas como timers api, pausetimer, timerpause... y nada. solo he encontrado en algún sitio como implementar lo que ya hay hecho, en VB. Estaría bien sí, lo de poder consultar el tiempo que queda para lanzar el timer...
Creo que tendré que implementar la chapucilla de turno, hasta que alguien no demuestre lo contrario jejeje.

Salu2!

Re: Pausar y reanudar timers

Publicado: 04 Ene 2010, 10:30
por Ximorro
Pues me parece un poco fallo de la api, porque son cosas bastante útiles que deberían considerar básicas.

Bueno pues suerte, si te atascas ya sabes, ponnos el código y nos pegaremos con ello. Y si programas unas funciones de pausa o como sea publícalo, seguro que será útil a los compañeros.

Re: Pausar y reanudar timers

Publicado: 05 Ene 2010, 00:27
por Jonny
Hola

A mí también me parece un gran fallo (y muy raro) por parte de la api, el no contemplar estas funciones básicas... Me extraña además, que existan estas funciones para threads y no para timers. Pero parece que así es.

Me puse con ello, pero desistí enseguida al ver en el lío que me metía y opté por enfocar la resolución de otra forma, pues tenía que tratar sonidos, texto ... y al solucionar una cosa, se fastidiaba otra ...
Así, que no pauso ningún timer jeje...

De todas formas, por si no la teneis y os interesa, tengo otra librería de timers que descargué ahce mucho tiempo del foro inglés.
No me gusta tanto como la librería que lleva AutoIt, pues no toca apis, pero sí tiene funciones para pausar, reanudar, comprobar estados de timers ... etc.
El problemilla que le veo, es que si en un timer ponemos una función bloqueadora, hasta que no se termina de ejecutar (un msgbox() por ejemplo) no se sigue ejecutando el timer, es como si lo pausáramos...


Si la quereis, la busco y la cuelgo en "Scripts".
Yo, antes la usaba, pero ahora prefiero la de AutoIt, aunque le falten funciones... Otra opción, sería combinar ambas librerías.

Salu2!