| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
sakarina Cdt


Registrado: 23 Ene 2008Mensajes: 9Ubicación: Sevilla
|
Publicado: Mar 12 Feb, 2008 2:03 pm Asunto: Sleep () y su precisición en milisegundos |
|
|
Hola,
Necesito enviar una trama a un COM de una tarjeta rs485 cada 5 milisegundos. Por lo que me he creado un hilo donde, dentro de un bucle while, escribo en la tarjeta, y duermo 5 milisegundos para volver a escribir en la tarjeta.
Al comprobar el envío entre tramas con un osciloscopio, resulta que no se envían cada 5 ms. sino un tiempo muy superior al margen de error que se me permite.
He estado haciendo otras pruebas mucho más simples con la función Sleep y ninguna de ellas da un resultado esperado a nivel de milisegundos (el desfase llega a ser incluso 10 veces superior al tiempo que se establece para dormir)
Estoy llegando a pensar que el método Sleep no es muy preciso para tiempos tan pequeños.
¿Existe alguna otra función que tenga precisión de milisegundos? ¿O alguna idea sobre que puede estar pasando?
Gracias. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 12 Feb, 2008 2:32 pm Asunto: |
|
|
Prueba con un TTimer. Mide en milisegundos el intervalo; el código que te interesa lo pones en el OnTimer:
| Código: | void __fastcall TfForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled = false;
[Código a ejecutar]
}
//--------------------------------------------------------------------------- |
Si lo que quieres hacer termina bien, basta poner Timer1->Enabled = true; _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
_Willa Capt


Registrado: 28 Ago 2002Mensajes: 169Ubicación: Madrid ( España )
|
Publicado: Mar 12 Feb, 2008 3:05 pm Asunto: |
|
|
HOla,
Revisa estas APIs, son para medir precisiones de tiempo.
LARGE_INTEGER startTime, timerFrequency, stopTime;
QueryPerformanceFrequency(&timerFrequency);
QueryPerformanceCounter(&startTime); _________________ Saludos
~~~~~~~~
_Willa
~~~~~~~~
www.avancegame.com |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
|
| Volver arriba |
|
 |
Cri_sys Master


Registrado: 13 Feb 2004Mensajes: 198Ubicación: Maringá, Brazil
|
Publicado: Vie 22 Feb, 2008 12:20 pm Asunto: |
|
|
Prueba con:
SleepEx(5,true);
para ver si da cierto! _________________ Read what I mean, not what I write! |
|
| Volver arriba |
|
 |
sakarina Cdt


Registrado: 23 Ene 2008Mensajes: 9Ubicación: Sevilla
|
Publicado: Vie 22 Feb, 2008 2:15 pm Asunto: Sleep y su precisión en milisegundos |
|
|
Muchas gracias por todas las opciones que me habeis proporcionado, pero aún así ninguna me da el tiempo de respuesta exacto (5 milisegundos) o dentro de mis márgenes de error (+-2 milisegundo).
Mi problema es que tengo que conectarme a seis COM de la tarjeta y, al tener un hilo para cada COM, el tiempo que debe dormir cada uno es variable. Incluso con los pulsos y las precisones me duerme el tiempo oportuno dos veces y la tercera vez tiene un desfase... |
|
| Volver arriba |
|
 |
|