El IDE y los comentarios me sugieren queno utilice DoEvents que puede dar problemas pero mi aplicacion funciona bien en el código que muestro a continuación y no así cuando reemplazo ese con Sleep(0)
Mi pregunta es ?
Lo puedo seguir utilizando asi ?
Cual es el potencial riesgo ?
B4X:
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
Activity.LoadLayout("login")
imgSplash.Visible=True
Splash
Else
''
End If
End Sub
Sub Splash
wait(4)
Activity.Finish
StartActivity(Main2)
End Sub
Sub wait(segundos As Int)
Dim ti As Long
ti = DateTime.Now + (segundos * 1000)
Do While DateTime.Now < ti
DoEvents ' funciona correcto hace la pausa que necesito
' Sleep(0) ' No funciona es como que no existiera y no se realiza ninguna espera.
Loop
End Sub
Yo también he tenido un caso en el que el Sleep no funciona como necesito, mientras que el DoEvents sí. De momento lo he dejado así. El problema, creo, es que está "deprecated", es decir que en futuras versiones de B4A puede dejar de existir.
En el caso de tu código, me pregunto si no podrías sustituir completamente el Loop en algo así:
B4X:
Sub wait(segundos As Int)
Sleep(segundos * 1000)
End Sub
guau !!! alli tenemos un Bug creo!!!
Sabes que sí funciona de esa manera colocando el Sleep dentro del mismo procedimiento pero no llamandolo desde otro.
Ahora parece no andar del todo correcto por que cambie de 3000 a 10000 y no se nota ninguna cambio y es como que tomara algun valor interno nada mas por que en teoria deberia demorar 10 segundos y no son mas de 3 o 4.
En este caso, quizás algo de este estilo sería más apropiado ...
B4X:
Sub Globals
Dim tmr As Timer
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
Activity.LoadLayout("login")
imgSplash.Visible=True
tmr.Initialize("tmr", 10000)
Else
''
End If
End Sub
Sub tmr_Tick
Activity.Finish
StartActivity(Main2)
End Sub
ES EXTRAÑO TODO ESTO...
Puse el Timer como indicas y funciona pero al igual que el Sleep le pongo un valor grande de tiempo y no me lo toma.
Puse tmr.Initialize("tmr", 30000) y el tiempo es siempre el mismo que se detiene la app. Es como que el flujo del codigo continua sin importar. que hay
Prueba con esto. He cambiado el nombre de la funcion Wait pues ya hay un comnado con ese nombre.
B4X:
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
Activity.LoadLayout("login1")
imgSplash.Visible=True
Splash
Else
''
End If
End Sub
Sub Splash
wait For(Esperar(4)) complete
Activity.Finish
StartActivity(Main2)
End Sub
Sub Esperar(segundos As Int) As ResumableSub
Dim ti As Long
ti = DateTime.Now + (segundos * 1000)
Do While DateTime.Now < ti
'DoEvents ' funciona correcto hace la pausa que necesito
Sleep(0) ' No funciona es como que no existiera y no se realiza ninguna espera.
Loop
Return ""
End Sub