Hola
Creo que he arreglado el problema que posteaba hace un rato con la función del timeout, de Chefito´.
Analizando el código, he visto donde estaba el problema (o eso creo), (sigo sin entender muy bien el por que funcionaba con valores muy bajos (inferiores a 15 sg)) pero creo haberle encontrado almenos la lógica al que no funcionara.
Y esque, la función dice que si el valor que se recibe es inferior a 60 sg, se ajuste $HourResult[1] (minutos) a los minutos actuales del sistema
If $TimeOut>=60 Then
$HourResult[1]=Mod(@MIN+(Int($TimeOut/60)),60)
Else
$HourResult[1]=@MIN
EndIf
Por lo que al pasarle 55 segundos por ejemplo, se calcula el resto de los segundos, que está corecto, pero no se actualizan los minutos... que normalmente tendría que sumarse un minuto a menos que el valor de @Sec sea inferior a 5 ¿No?.
He arreglado (creo) la función para que al pasar un valor inferior a 60 sg se calculen los segundos, pero también se añadan los minutos que corresponda y las horas si corresponde.
Me ha costado bastante (toda una tarde) dejarla lo mejor que he sabido, pues el hecho de actualizar minutos suponía actualizar horas y entre tanto cálculo y tanto código, que si lo hago así, que si lo hago asá, siempre acababa por destrozar la función jejeje. Y cuanto más tiempo llevaba con ello más la destrozaba. Pero al fin parece haber salido algo potable.
No la he testeado a fondo, pero lo que he podido probar por el momento parece ir correctamente. Probad si quereis a ver que os parece (No me riñais mucho) si no está muy fina, que es viernes... jejeje.
Código: Seleccionar todo
Func SetTimeOut($TimeOut)
Local $HourResult[3]
If $TimeOut<0 Then Return 0
If $TimeOut==0 Then Return 0
If $TimeOut>=3600 Then
$HourResult[0]=Mod(@HOUR+(Int($TimeOut/3600)),24)
Else
$HourResult[0]=@HOUR
EndIf
If $TimeOut>=60 Then
$HourResult[1]=Mod(@MIN+(Int($TimeOut/60)),60)
EndIf
$HourResult[1]=@MIN
$CalcSec=Int((@Sec+$TimeOut)/60)
$HourResult[1]+=$CalcSec
$HourResult[2]=Mod(@SEC+$TimeOut,60)
$CalcMin=Int($HourResult[1]/60)
$HourResult[0]+=$CalcMin
$HourResult[0]=Mod($HourResult[0], 24)
$HourResult[1]=Mod($HourResult[1], 60)
For $N=0 to 2
If StringLen($HourResult[$N])==1 Then
$HourResult[$N]="0"&$HourResult[$N]
EndIf
Next
Return $HourResult[0]&":"&$HourResult[1]&":"&$HourResult[2]
EndFunc
$Timeout=SetTimeout(55)
msgbox(0, "", @Hour&":"&@Min&":"&@Sec&@CRLF&$Timeout)
He puesto los malditos 55 segundos en la llamada a la función como ejemplo, para que veais que devuelve la hora actual y la calculada por la función correctamente. Falta testear que pasaría si fueran las 23:59:45 y se le pasaran más de 15 segundos (debería responder correctamente, pero a saber.... En el fin de semana o el lunes lo pruebo.
Salu2!