| Autor |
Mensaje |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Lun Abr 11, 2011 2:02 pm |
|
|
Hola soy nuevo en el foro
Tengo este problema necesito crear un timer para que despues de que pase cierto tiempo llamar una tarea (como una interrupcion) se algo de programacion pero nunca he programado algo asi si me pudieran ayudar les agradeceria mucho.
|
|
|
|
 |
mcun

Moderador
Registrado: Dom Abr 18, 2010 4:30 pm Mensajes: 2790 Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
|
 Publicado: Lun Abr 11, 2011 3:34 pm |
|
|
|
 |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Lun Abr 11, 2011 3:51 pm |
|
|
Disculpa, es en lenguaje C
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Mar Abr 12, 2011 3:25 pm |
|
casi todos los lenguajes tiene una funcion sleep que hace precisamente eso. esperar x segundos, y despues seguir con lo que toque. 
_________________ #446716
--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me... (from comp.os.linux.misc) [ DNFD ] - [ F4A ] - [ dotfiles ]
|
|
|
|
 |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Mar Abr 12, 2011 5:29 pm |
|
|
Como entiendo el funcionamiento del sleep() es que se queda detenido el programa sin pasarce a la siguiente instruccion, y yo necesito un timer para cada 10 ms llame una funcion pero mientras pasan los 10 ms seguir efecutando el demas codigo.
|
|
|
|
 |
hipersayan_x

Forista Distinguido
Registrado: Jue Abr 26, 2007 11:00 pm Mensajes: 1426
|
 Publicado: Mar Abr 12, 2011 6:04 pm |
|
Tiene que ser necesariamente C o puede ser C++? Porque si es así podrías usar la clase QTimer.
_________________ "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit."
"Finibus Bonorum Et Malorum", Cicerón
|
|
|
|
 |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Mar Abr 12, 2011 6:32 pm |
|
|
Nunca he programado en c++ por lo que se dificultaria mucho
|
|
|
|
 |
hipersayan_x

Forista Distinguido
Registrado: Jue Abr 26, 2007 11:00 pm Mensajes: 1426
|
 Publicado: Mar Abr 12, 2011 9:06 pm |
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Mié Abr 13, 2011 2:09 am |
|
david1820 escribió: Como entiendo el funcionamiento del sleep() es que se queda detenido el programa sin pasarce a la siguiente instruccion, y yo necesito un timer para cada 10 ms llame una funcion pero mientras pasan los 10 ms seguir efecutando el demas codigo. Para eso necesitas diferentes hilos de ejecución. Un hilo se encarga de hacer el timer, y el otro de ejecutar el resto del código. El hilo del timer va a funcionar igual, pero a diferencia de antes, el otro hilo se va a seguir ejecutando. http://www.chuidiang.com/clinux/procesos/procesoshilos.php
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Mié Abr 13, 2011 2:08 pm |
|
|
Checare esa informacion, no me pondrian proporcionar algunos ejemplos sobre como crear un timer y algo sobre hilos (threads? es lo mismo?).
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Mié Abr 13, 2011 11:13 pm |
|
david1820 escribió: Checare esa informacion, no me pondrian proporcionar algunos ejemplos sobre como crear un timer y algo sobre hilos (threads? es lo mismo?). hola, para threads te recomiendo que veas unos ejemplos que dan en una materia en mi universidad (no es por dar propaganda): http://www.udb.edu.sv/Academia/Laborato ... uia5SO.pdfEn el sitio hay varias guías que te pueden servir para programación en C http://www.udb.edu.sv/Academia/Laborato ... formSO.htmEntre ellas puedo recomendarte semáforos y las demás guías de comunicación entre procesos (ojo que esta última recomendación es offtopic).
_________________ Grüße...
Maiku
Full linux alchemist!!!
|
|
|
|
 |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Jue Abr 14, 2011 3:53 pm |
|
|
Gracias, he estado tratando de compilar unos ejemplos pero con esa guia explica muy bien. A como voy entendiendo seria: Crear un hilo para que este ejecutando el timer y otro hilo para la otra tarea, cuando el timer cumpla el tiempo necesito modificar unas variables para la otra tarea, ¿asi se haria?.
Como puedo crear un timer de unos 5 ms.
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Lun Abr 18, 2011 1:08 pm |
|
david1820 escribió: Gracias, he estado tratando de compilar unos ejemplos pero con esa guia explica muy bien. A como voy entendiendo seria: Crear un hilo para que este ejecutando el timer y otro hilo para la otra tarea, cuando el timer cumpla el tiempo necesito modificar unas variables para la otra tarea, ¿asi se haria?.
Como puedo crear un timer de unos 5 ms. Tu planteamiento puede ser válido. También puedes hacer que el timer cree y lance el hilo que ejecute la tarea sin necesidad de modificar parámetros. Es cuestión de escoger el mejor planteamiento para tu caso. En cuanto al timer, en todos los lenguajes tienes una función "sleep()" o puede que con otro nombre, que hace que el hilo que lo ejecuta se duerma un tiempo determinado. Típicamente el parámetro de la función es un entero indicando el tiempo aproximado en ms que el hilo estará dormido. El código del timer quedaría más o menos así: Código: while(condition){ //crear o modificar hilo ejecución; sleep(5); } Tampoco te se decir en qué librería está declarada la función, ya que parece que hay varias implementaciones.
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
david1820

Forista Nuevo
Registrado: Jue Abr 07, 2011 5:51 pm Mensajes: 15
|
 Publicado: Mar Abr 19, 2011 5:23 pm |
|
|
pero creo que este sleep para completamente todo el codigo? explico mas bien la aplicacion para que entiendan y me puedan dar una solucion mas viable necesito leer unos sensores y mandar los datos a la pc mediante USB esto ya lo hice la comunicacion recibo y envio datos a un microcontrolador pero necesito leer los sensores cada 10 ms estos sensores y modificar estas variables en todo el codigo las cuales me daran un resultado el cual escribire al microcontrolador, mi problema es hacerlo cada 10 ms leer los sensores mientras sigo ejecutando otra tarea.
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Mié Abr 20, 2011 6:15 am |
|
|
A ver si lo explico un poco más claro. En la solución basada en hilos, vas a tener a Paco (el timer) y a Pepe (el que realiza la tarea). Paco lo que va a hacer es (según tú) escribirle a Pepe en un papel lo que tiene que hacer, y Pepe lo va a leer y va a actuar en consecuencia. Si Paco se duerme, eso no afecta a Pepe que seguirá haciendo su tarea.
Lo que se va a parar es el hilo que ejecuta el sleep, pero no el otro hilo. Ten en cuenta que en el momento en que tienes más de un hilo de ejecución ambas tareas no están sincronizadas, lo que viene a ser que puede que necesites considerar qué es lo que pasa en algunos casos extra, porque no puedes presuponer qué instrucción se va a ejecutar antes.
También depende de que otra tarea es la que necesitas ejecutar. Si lo que quieres es que haya un hilo leyendo sensores y otro que sea el encargado de mandar la información al pc, puede que mi planteamiento (que el timer sea el que cree los hilos) sea más conveniente, aunque posiblemente tendrías que sincronizar de alguna manera el proceso de escritura.
Volviendo con Paco y Pepe, mi plantemiento es el siguiente: Inicialmente tenemos a Paco. Paco se despierta y se da cuenta de que tiene que mandar cosas, asi que crea a Pepe y le encarga la tarea de enviarlas. Paco se vuelve a dormir, mientras que Pepe (que es muy trabajador) se pone a trabajar. Lo que haga Pepe mientras Paco está dormido es cosa suya y puede que cuando se despierte Paco, Pepe haya terminado (o no) su encargo. En cualquier caso, cuando Paco se despierte creará a otro Pepe (Pepe2) y le encargará el mismo trabajo (con otros parámetros) haya acabado o no Pepe su trabajo.
Espero que haya aclarado las cosas un poco.
_________________ Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)
|
|
|
|
 |
|
|
|