Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Contador milisegundos

Estas en el tema de Contador milisegundos en el foro de C/C++ en Foros del Web. Hola! Estoy haciendo un programa en C el cual necesito que ejecute un bucle durante un determinado espacio de tiempo. He utilizado la función time ...
  #1 (permalink)  
Antiguo 24/09/2008, 10:51
 
Fecha de Ingreso: enero-2008
Mensajes: 122
Antigüedad: 16 años, 3 meses
Puntos: 0
Contador milisegundos

Hola!
Estoy haciendo un programa en C el cual necesito que ejecute un bucle durante un determinado espacio de tiempo. He utilizado la función time que me permite calcular los segundos transcurridos y cuando lo crea necesario cambio el valor de la variable que me hace ejecutar el bucle. Me gustaría reducir ese tiempo a milisegundos. ¿Existe una función similar a time que me permita calcular el tiempo transcurrido en milisegundos? He estado buscando en google y parece que no.
A continuación, os dejo la definición de la función time:

time_t time(time_t *t) ** devuelve el tiempo transcurrido, medido en segundos desde ``la

época'' 0 horas, 0 minutos, 0 segundos, tiempo universal coordinado (GMT) del 1^o de enero
de 1970. Esta medida se llama el ``tiempo de calendario''. Si t no es nulo, el valor devuelto
también se guarda en la zona de memoria a la que apunta t. En caso de error, se devuelve
((time_t)*1) y se asigna a la variable errno un valor apropiado.

Saludos y muchas gracias.
  #2 (permalink)  
Antiguo 24/09/2008, 11:18
 
Fecha de Ingreso: enero-2008
Mensajes: 122
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Contador milisegundos

Quiero que se repita la llamada a mifuncion durante menos de un segundo, durante 100 milisegundos por ejemplo
El código sería el seiguiente:

#define miPausa
int main()
{
time_t tIni, tFin;
time(&tIni);
do
{
mifuncion();
time(&tActual);
pausa = tActual - tInicial;
}while(pausa)
}
Saludos
  #3 (permalink)  
Antiguo 24/09/2008, 12:43
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: Contador milisegundos

si estas sobre windows, puedes usar la funcion
Sleep(tiempo); para pausar el sistema por el tiempo que desees. Solo recuerda que eso pausa todos los procesos de tu aplicacion.

Ahora, si quieres algo diferente, puedes utilizar la funcion
DWORD WINAPI GetTickCount(void);
viene en windows.h

Código:
DWORD tiempo1 = GetTickCount();
// hacer algo
DWORD tiempo2 = GetTickCount();

DWORD tiempoTranscurrido = tiempo2-tiempo1;
esa funcion no es 100% precisa. Y hay otras formas de hacerlo.
Si quieres algo de alto rendimiento, busca sobre el QueryPerformanceFrequency

saludos,
  #4 (permalink)  
Antiguo 25/09/2008, 01:00
 
Fecha de Ingreso: enero-2008
Mensajes: 122
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Contador milisegundos

Hola,
Gracias por la respuesta.
No no estoy en Windows, estoy en Linux.
La función sleep creo que es para dormir determiandos segundos no milisegundos. Para milisegundos creo recordar que existe usleep. El problema es que no quiero que el proceso se quede dormido a la espera, quiero que realice una serie de acciones durante un tiempo controlado. No se si me explico...

Saludos
  #5 (permalink)  
Antiguo 25/09/2008, 08:34
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: Contador milisegundos

ah entonces mirate este articulo:
http://cmasomenos.blogspot.com/2008/...na-rutina.html

trae el codigo para contar los milisegundos de una manera precisa en linux.

saludos,
  #6 (permalink)  
Antiguo 26/09/2008, 12:21
 
Fecha de Ingreso: enero-2008
Mensajes: 122
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Contador milisegundos

gracias, lo probaré

saludos
  #7 (permalink)  
Antiguo 26/09/2008, 14:44
 
Fecha de Ingreso: enero-2008
Mensajes: 7
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Contador milisegundos

RECUERDA que 1000 milisegundos es un segundo y si estuvieras en windows hubieras puesto nada mas q Sleep(1000); y listo ... saludos
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 18:12.