Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Sleep () y su precisición en milisegundos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Sleep () y su precisición en milisegundos Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

HOla,

Revisa estas APIs, son para medir precisiones de tiempo.

LARGE_INTEGER startTime, timerFrequency, stopTime;

QueryPerformanceFrequency(&timerFrequency);
QueryPerformanceCounter(&startTime);
_________________
Saludos
~~~~~~~~
Wink _Willa
~~~~~~~~
www.avancegame.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Hola:

Mira mi respuesta:

https://cppbuilder.es/viewtopic.php?t=11282
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Prueba con:
SleepEx(5,true);

para ver si da cierto!
_________________
Read what I mean, not what I write!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Sleep y su precisión en milisegundos Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.