Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

DoEvents y Aplicaciones de tiempo Real

Estas en el tema de DoEvents y Aplicaciones de tiempo Real en el foro de Visual Basic clásico en Foros del Web. Buenas Estoy haciendo un bucle en tiempo real que toma muestras de la tarjeta de sonido. Por ejemplo: Do DoEvents Call Muestrea_Tarjeta_Sonido() Call Procesa_Muestras() Loop ...
  #1 (permalink)  
Antiguo 20/10/2009, 16:42
 
Fecha de Ingreso: octubre-2009
Mensajes: 15
Antigüedad: 14 años, 6 meses
Puntos: 0
DoEvents y Aplicaciones de tiempo Real

Buenas

Estoy haciendo un bucle en tiempo real que toma muestras de la tarjeta de sonido.

Por ejemplo:

Do
DoEvents

Call Muestrea_Tarjeta_Sonido()
Call Procesa_Muestras()

Loop While 1

Para que el ordenador no se cuelgue he metido el DoEvents. El problema es que cuando arrastras la ventana con el ratón, minimizas, maximizas o haces perrerías, ... entonces el programa ya no funciona correctamente porque no se cojen las muestras a tiempo. Por ejemplo, si te dedicas a arrastrar la ventana eternamente windows no atiende al procedimiento de muestreo de la tarjeta de sonido.


¿No hay alguna forma de limitar el DoEvents de forma que pasados X milisegundos windows deje todo lo que está haciendo y siga con mi aplicación?

Gracias
  #2 (permalink)  
Antiguo 21/10/2009, 03:06
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: DoEvents y Aplicaciones de tiempo Real

No sé si servirá, pero podrías hacer el trabajo en un timer y quitar el doevents a ver...
Añades un timer con interval = 10 o algo así, y en lugar de tu código pones:

Timer1.Enabled = True

Y luego metes este código:

Código :
Ver original
  1. Private Sub Timer1_Timer()
  2.   Timer1.Enabled = False
  3.   Call Muestrea_Tarjeta_Sonido()
  4.   Call Procesa_Muestras()
  5.   Timer1.Enabled = True
  6. End Sub

Quizá entre timer y timer evites que se cuelgue windows sin doevents. Por probar...
  #3 (permalink)  
Antiguo 21/10/2009, 05:34
 
Fecha de Ingreso: octubre-2009
Mensajes: 15
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: DoEvents y Aplicaciones de tiempo Real

Cita:
Iniciado por pkj Ver Mensaje
No sé si servirá, pero podrías hacer el trabajo en un timer y quitar el doevents a ver...
Añades un timer con interval = 10 o algo así, y en lugar de tu código pones:

Timer1.Enabled = True

Y luego metes este código:

Código :
Ver original
  1. Private Sub Timer1_Timer()
  2.   Timer1.Enabled = False
  3.   Call Muestrea_Tarjeta_Sonido()
  4.   Call Procesa_Muestras()
  5.   Timer1.Enabled = True
  6. End Sub

Quizá entre timer y timer evites que se cuelgue windows sin doevents. Por probar...
No va. Pero no es problema de que se cuelgue, sino de que windows le da más prioridad a arrastrar las ventanas que a muestrear de la tarjeta de sonido.
  #4 (permalink)  
Antiguo 23/10/2009, 18:32
 
Fecha de Ingreso: octubre-2009
Mensajes: 15
Antigüedad: 14 años, 6 meses
Puntos: 0
Problema de Multitarea

Estoy haciendo una aplicación en tiempo real que muestrea datos de la tarjeta de sonido a 8000 muestras por segundo, osease, una muestra cada 125 nanosegundos.

Resulta que, durante la ejecución del programa, cuando maximizas y minimizas otros programas (dígase un PDF, un documento de word, lo que sea) durante ese pequeño instante de tiempo windows no atiende a la tarea de muestrear la tarjeta de sonido.

Quizás el problema sea que el control de la tarjeta de sonido habría que hacerlo utilizando interrupciones en otro lenguaje de programación, dígase C++, en lugar de utilizar la API de windows.

¿alguna idea?
  #5 (permalink)  
Antiguo 23/10/2009, 20:22
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: DoEvents y Aplicaciones de tiempo Real

Temas combinados.

Por favor, evite abrir varios temas sobre el mismo asunto.
Véase: http://www.forosdelweb.com/f74/polit...el-web-101485/

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:34.