Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 32 mensajes ]  Ir a página 1, 2, 3  Siguiente
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Lun Abr 11, 2011 2:02 pm 
Arriba  
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.

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

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)

Nota Publicado: Lun Abr 11, 2011 3:34 pm 
Arriba  
en que lenguaje ?¿??¿

_________________
... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..

Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM
Debian| ArchLinux |Linux User #508809

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Lun Abr 11, 2011 3:51 pm 
Arriba  
Disculpa, es en lenguaje C

 Perfil Email  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Abr 12, 2011 3:25 pm 
Arriba  
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 ]

 Perfil Email WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Mar Abr 12, 2011 5:29 pm 
Arriba  
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.

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Jue Abr 26, 2007 11:00 pm
Mensajes: 1426

Nota Publicado: Mar Abr 12, 2011 6:04 pm 
Arriba  
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

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Mar Abr 12, 2011 6:32 pm 
Arriba  
Nunca he programado en c++ por lo que se dificultaria mucho

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Jue Abr 26, 2007 11:00 pm
Mensajes: 1426

Nota Publicado: Mar Abr 12, 2011 9:06 pm 
Arriba  
Sino de ultima, una solución sería jugando con la librería time.h, un loop while y quizás alguna función función de callback, aunque casi con seguridad va a ser necesario usar threads, te dejo algo de info:

http://www.cs.cf.ac.uk/Dave/C/OLDC/section2_22_28.html
http://www.dreamincode.net/code/snippet2169.htm
http://www.chuidiang.com/clinux/proceso ... shilos.php

Es lo que se me ocurre, no son un experto en C :oops:

_________________
"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit."

"Finibus Bonorum Et Malorum", Cicerón

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mié Abr 13, 2011 2:09 am 
Arriba  
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)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Mié Abr 13, 2011 2:08 pm 
Arriba  
Checare esa informacion, no me pondrian proporcionar algunos ejemplos sobre como crear un timer y algo sobre hilos (threads? es lo mismo?).

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Mié Abr 13, 2011 11:13 pm 
Arriba  
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.pdf

En el sitio hay varias guías que te pueden servir para programación en C http://www.udb.edu.sv/Academia/Laborato ... formSO.htm

Entre 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!!!

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Jue Abr 14, 2011 3:53 pm 
Arriba  
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.

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Lun Abr 18, 2011 1:08 pm 
Arriba  
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)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Jue Abr 07, 2011 5:51 pm
Mensajes: 15

Nota Publicado: Mar Abr 19, 2011 5:23 pm 
Arriba  
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.

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mié Abr 20, 2011 6:15 am 
Arriba  
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)

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 32 mensajes ]  Ir a página 1, 2, 3  Siguiente
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO