Red de conocimiento informático - Conocimiento sistemático - Encuentre una subrutina con un retraso exacto de 10 ms, luego use esa subrutina para diseñar una subrutina anidada con un retraso de 1 s.

Encuentre una subrutina con un retraso exacto de 10 ms, luego use esa subrutina para diseñar una subrutina anidada con un retraso de 1 s.

Los temporizadores de suspensión y temporizador son inexactos y el error es demasiado grande.

Si quieres ser preciso, puedes usar un temporizador en Windows

BOOL ?QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL ?QueryPerformanceCounter(LARGE_INTEGER * lpCount) ;

Dos funciones. LARGE_INTEGER es un entero de 64 bits.

La primera función obtiene la frecuencia del reloj de la computadora (veces/segundo) y la segunda función obtiene el conteo del reloj. Llamado dos veces para calcular la diferencia entre los dos intervalos de conteo de reloj, divida por la frecuencia para obtener la diferencia horaria. Precisión de microsegundos.

Le damos una función, el parámetro es la duración del retraso, en segundos, implementada en lenguaje C en el entorno WINDOW.

Tiempo 10 ms ?Retraso disponible( 0.01

Retraso 1s, Retraso(1.0);

void?Retraso(?doble?t?)

p>

{

LARGE_INTEGER?litmp; ?

LONGLONG?QPart1, QPart2

doble?dfMinus, ?dfFreq, ?dfTim;?

QueryPerformanceFrequency(amp; litmp);

dfFreq?=?(double)litmp.QuadPart //?Obtener la frecuencia de reloj del contador

QueryPerformanceCounter(amp; litmp);

QPart1?=?litmp.QuadPart //Obtener el valor inicial

do

{

QueryPerformanceCounter(amp ;litmp);

QPart2?=?litmp.QuadPart;//Obtener valor de cancelación

dfMinus?=?(double)(QPart2-QPart1 );

dfTim?=?dfMinus?/?dfFreq;//?Obtener el valor de tiempo correspondiente en segundos

} while(dfTimlt;t);

};