Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Ayuda con funcion Delay (https://www.clubdelphi.com/foros/showthread.php?t=83486)

Novatin 24-06-2013 03:10:42

Ayuda con funcion Delay
 
Que tal amigos estoy intentando hacer una rutina del tipo:

void Delay(int time)
{
for (int i=1; i<=time;i++);
}

Estuve haciendo pruebas con QueryPerformanceCounter(), pero vi que se consume muchos ciclos de cpu... asi que estoy viendo la posibilidad de usar WaitForSingleObject... sin embargo aun no consigo un ejemplo completo que funcione en Builder c++ 6...

Si alguien me echara unos "bytes" con esto :D estaría muy agradecido...

Un saludo

ecfisa 24-06-2013 05:16:09

Cita:

Empezado por Novatin (Mensaje 462675)
Que tal amigos estoy intentando hacer una rutina del tipo:

void Delay(int time)
{
for (int i=1; i<=time;i++);
}

Hola Novatin.

Para reemplazar equivalentemente a ese codigo tenes la funcion Sleep:
Código:

{
  ::Sleep(n); // n: DWORD (ms)       
 }

Pero te soy sincero, no sé si será o no una buena opción, ya que tu mensaje no me deja en claro la situación en que se va a aplicar el retardo...

Saludos. :)

Novatin 25-06-2013 04:48:50

Hola ecfisa,

Lamento haberme ido "al punto" sin explicar mucho el problema... el retardo lo quiero para generar una secuencia de pulsos por puerto paralelo para un motor del tipo "stepper"; estuve probando con la funcion Delay que puse en el anterior mensaje, pero me di cuenta que no es muy precisa; Luego pase por usar QueryPerformanceCounter() de la siguiente manera:

Código:

LARGE_INTEGER pcFreq; //ENTERO_LARGO de muchos bits.. :D
QueryPerformanceFrequency(&pcFreq); //captura la frecuencia de la CPU
int MicroSec=(pcFreq.QuadPart/1000)*1.3;// 1.3 Microsegundos

void TForm1::miDelay(int MicroSec)
{
  LARGE_INTEGER freqIni; //Variable frecuencia inicial
  LARGE_INTEGER freqFin; //Variable frecuencia final
  QueryPerformanceCounter(&freqFin); //Captura Frecuencia Actual

  freqIni=freqFin; //Igualando Frecuencia Inicial y final
  while(freqIni.QuadPart/1000<freqFin.QuadPart/1000+MicroSec) //While consume mucho CPU
      QueryPerformanceCounter(&freqIni);
}

y aunque esta funcion es bastante precisa me deja el problema de consumirme muchos ciclos de cpu :eek: ...


Lo de la función Sleep, ya la habia probado pero tiene tambien el problema de no ser tan precisa para mover motores stepper...

Fue por eso que me habia planteado como una opción la posibilidad de usar WaitForSingleObject(), que hasta donde entiendo puede generar un retardo sin consumir tantos ciclos de cpu... pero aun no encuentro un ejemplo claro de como usarlo..

PD: El motor stepper requiere aún pulsos por debajo del 1 milisegundo.


La franja horaria es GMT +2. Ahora son las 05:03:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi