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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como hacer Bucle un determinado tiempo
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Como hacer Bucle un determinado tiempo  (Leído 7,495 veces)
Alvaro.s

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Como hacer Bucle un determinado tiempo
« en: 14 Julio 2015, 11:11 am »

Hola amigos. Soy nuevo en el foro y antes de nada gracias por leer el mensaje y las contestaciones.

Estoy intentando hacer un bucle que se ejecute 5 segundos solo y después salga del bucle.
Como puedo hacer eso?

Saludos y gracias.


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Como hacer Bucle un determinado tiempo
« Respuesta #1 en: 14 Julio 2015, 11:28 am »

Hola amigos. Soy nuevo en el foro y antes de nada gracias por leer el mensaje y las contestaciones.

Estoy intentando hacer un bucle que se ejecute 5 segundos solo y después salga del bucle.
Como puedo hacer eso?

Saludos y gracias.
Crea dos hilos, uno seria el que haga la tarea que quieres y el segundo esperará durante los 5 seg por el primer hilo sino lo termina o lo suspende, etc.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como hacer Bucle un determinado tiempo
« Respuesta #2 en: 14 Julio 2015, 13:08 pm »

Usando time(0) de la librería time.h, guardas el tiempo de comienzo en una variable. Luego, compruebas cuanto tiempo pasó en cada ciclo (tiempoAhora - tiempoAntes).
time(0) retorna un número en segundos. Con eso, te llega para hacer lo que buscas. Ya si quieres profundizar en el manejo de tiempo: http://www.cplusplus.com/reference/ctime/time/

También tienes la librería chrono en C++11, pero ya es más complicada.

Código
  1. #include <time.h>
  2.  
  3. /* ... */
  4.  
  5. time_t start = time(0);
  6.  
  7. do{
  8. /* ... */
  9. while(time(0)-start>5);
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Como hacer Bucle un determinado tiempo
« Respuesta #3 en: 14 Julio 2015, 13:26 pm »

Pensé acerca de ese tipo de enfoque usando un tipo de TickCount, pero ivancea96, con eso realmente se puede asegurar que el hilo solo se ejecutara 5 segundos? y si por algun motivo el hilo nunca alcanza la parte while o durante la comprobacion la funcion retorna 4.9 y de nuevo se vuelve a ejecutar el codigo?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como hacer Bucle un determinado tiempo
« Respuesta #4 en: 14 Julio 2015, 13:37 pm »

En primer lugar, no puede devolver 4.9 porque no es coma flotante, y es en segundos.

He de decir, que ese supuesto "4.9", también se cumple en tu código. Puede faltarte unos milisegundos para acabar a tu thread, y el otro, volver a comenzar el bucle.

En cualquier caso, el tiempo máximo posible será de (5s + tiempo del código del bucle en el peor caso), aproximadamente. Es algo inevitable, salvo que dentro del código del bucle se pongan comprobantes del tiempo.

También se podría precalcular el tiempo que puee tardar en el bucle, y hacer mediciones con clock() para intentar exactitud. Pero no creo que se necesite tal exactitud.
« Última modificación: 14 Julio 2015, 14:02 pm por ivancea96 » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Como hacer Bucle un determinado tiempo
« Respuesta #5 en: 14 Julio 2015, 14:36 pm »

En primer lugar, no puede devolver 4.9 porque no es coma flotante, y es en segundos.

He de decir, que ese supuesto "4.9", también se cumple en tu código. Puede faltarte unos milisegundos para acabar a tu thread, y el otro, volver a comenzar el bucle.

En cualquier caso, el tiempo máximo posible será de (5s + tiempo del código del bucle en el peor caso). Es algo inevitable, salvo que dentro del código del bucle se pongan comprobantes del tiempo.

Cuando mencione 4.9 me referia a calcular el valor desde los milisegundos.

El mayor problema que veo con ese enfoque es sobre tener el control del tiempo de ejecucion ya que si por algun motivo el codigo nunca alcanza la comprobacion en el while o tarda más del tiempo establecido ya que el mismo hilo estaria intentando controlar su propio tiempo de ejecucion. Diria que ese enfoque seria mas como ejecutar código por al menos un tiempo especifico.

El que yo sugiero seria crear el Worker thread y esperar por este a que ya sea pase el tiempo establecido o el hilo termine, claro que para determinar el tiempo del worker thread usaria las funciones de sincronizacion y no con funciones de tiempo.






« Última modificación: 14 Julio 2015, 14:39 pm por x64Core » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como hacer Bucle un determinado tiempo
« Respuesta #6 en: 14 Julio 2015, 14:53 pm »

¿Y pretenderías terminar el hilo por la fuerza? En mi método, dejamos que el hilo acabe. Salvo que así sea, el otro método es cerrarlo por la fuerza. Y cerrar por la fuerza puede dejar memoria suelta, y si fuera C++, ya ni hablamos.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Como hacer Bucle un determinado tiempo
« Respuesta #7 en: 14 Julio 2015, 15:24 pm »

Sí, aunque se podria encapsular todos los recursos que serian usados en el hilo en una clase asi antes de crear el worker thread creamos un objeto y pasamos el puntero al objeto ya sea si termina comprobamos el estado del objeto, incluso asi no es 100% seguro.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como hacer Bucle un determinado tiempo
« Respuesta #8 en: 14 Julio 2015, 15:42 pm »

Claro. Incluso una clase, al acceder, acabarías pudiendo cerrando el thread en malos momentos. Incluso un simple array podría quedar mal xD

Mejor con una comprobacion simple en el bucle, asegurandolo todo.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Como hacer Bucle un determinado tiempo
« Respuesta #9 en: 14 Julio 2015, 16:04 pm »

Claro. Incluso una clase, al acceder, acabarías pudiendo cerrando el thread en malos momentos. Incluso un simple array podría quedar mal xD

Mejor con una comprobacion simple en el bucle, asegurandolo todo.
Podria ser 100% seguro, eso depende para qué tipo de tareas, el ejecutar un hilo por un cierto tiempo podria ser ideal para tareas de completacion en una pila de hilos que solo podrian ejecutar por cierto tiempo y donde no se requiera más recursos de los reservados sino para liberar los recursos.

Y si por algun motivo se require reservar memoria en el hilo eso significaria que el problema se está resolviendo de una manera incorrecta o bien este enfoque no es para el tipo de tareas para el cual se está intenta hacer.

Asi que yo dí mi solucion para el problema -> Ejecutar por un cierto limite de tiempo.
Tu solucion no es para ese tipo de problema o almenos eso es lo que entendi del primer Post del usuario.

En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
hacer que un exe se ejecute solo en determinado tiempo?
Programación Visual Basic
koopa2 3 4,011 Último mensaje 10 Noviembre 2006, 13:48 pm
por Gorky
¿Como hacer ingresar solo un tipo de dato determinado?
Programación C/C++
theluigy13etv 1 3,643 Último mensaje 2 Julio 2011, 01:58 am
por BlackZeroX
(Solucionado) [VBS] como hacer este bucle? « 1 2 »
Scripting
Eleкtro 11 10,948 Último mensaje 22 Febrero 2012, 10:14 am
por Eleкtro
enviar por ftp txt determinado tiempo
Scripting
asdexiva 6 4,040 Último mensaje 14 Noviembre 2012, 04:07 am
por ovichan
Como puedo hacer que determinado dia / año me salga un messagebox ?
Programación C/C++
luis456 1 2,073 Último mensaje 19 Diciembre 2012, 20:49 pm
por тαптяα
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines