A veces queremos detener el programa, mostrando información, por una cantidad de segundos.
Como el Delay es relativo a cada computador, delay (1000) no garantiza que transcurra 1 segundo (la solución a esto, o por lo menos, lo mas cercano a solucionarlo, lo demostraré mas adelante).
Diseñé el siguiente Procedure:
PROCEDURE Segundos (Seg:BYTE);
{ Funciona para detener un programa por 'Seg' segundos.
Valores de 'Seg' mayores a 60 segundos pueden ocasionar
calculos de tiempo erroneos. }
VAR H1,H2,M1,M2,S1,S2,Cent1,Cent2:WORD;
S0:0..60;
S90:0..1;
S0B,Cent90B:BOOLEAN;
BEGIN
S0:=0;
S90:=0;
S0B:=FALSE;
Cent90B:=FALSE;
GETTIME (H1,M1,S1,Cent1);
INC (M1);
INC (S1);
INC (Cent1);
IF Cent1 > 90 THEN
BEGIN
Cent90B:=TRUE;
Cent1:=Cent1-90;
S90:=1
END;
IF S1 = 1 THEN
S0B:=TRUE;
REPEAT
GETTIME (H2,M2,S2,Cent2);
INC (M2);
INC (S2);
INC (Cent2);
IF (Cent2 > 90) AND (M1 = M2) AND Cent90B THEN
Cent2:=Cent2-90;
IF (S2 = 1) AND NOT S0B THEN
S0:=60;
S2:=S2+S0;
UNTIL (S2-S1 >= Seg+S90) AND (Cent2 >= Cent1)
END;
NOTA: el programa o unidad que contengan a este Procedure, debe tener utilizar DOS (USES Crt,Dos;).
Bernardo L.