Autor
|
Tema: Como hacer Bucle un determinado tiempo (Leído 7,429 veces)
|
Alvaro.s
Desconectado
Mensajes: 4
|
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
Mensajes: 1.908
|
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
Mensajes: 3.412
ASMático
|
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. #include <time.h> /* ... */ do{ /* ... */
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.908
|
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
Mensajes: 3.412
ASMático
|
¿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
Mensajes: 1.908
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 1.908
|
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
|
|
|
|
|
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,000
|
10 Noviembre 2006, 13:48 pm
por Gorky
|
|
|
¿Como hacer ingresar solo un tipo de dato determinado?
Programación C/C++
|
theluigy13etv
|
1
|
3,619
|
2 Julio 2011, 01:58 am
por BlackZeroX
|
|
|
(Solucionado) [VBS] como hacer este bucle?
« 1 2 »
Scripting
|
Eleкtro
|
11
|
10,883
|
22 Febrero 2012, 10:14 am
por Eleкtro
|
|
|
enviar por ftp txt determinado tiempo
Scripting
|
asdexiva
|
6
|
4,008
|
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,046
|
19 Diciembre 2012, 20:49 pm
por тαптяα
|
|