API Basic WaitUntil fr - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Wait Until / Timeout
ClassicUO • Basic
Wait Until teste une condition jusqu’au succès ou à l’expiration du délai. C’est une extension Basic, pas une instruction VB.NET. Elle reste dans le script courant sans créer de thread ni lancer une autre procédure.
Syntaxe exacte
Wait Until condition Timeout milliseconds
Paramètres
condition— condition est évaluée immédiatement puis entre de courtes attentes. Utilisez un Boolean ou une comparaison : le nombre 0 signifie false, les autres valeurs suivent If. Le String "false" n’est pas Boolean false. Les appels UO et fonctions personnelles sont possibles ; leurs erreurs se propagent et leurs effets se répètent à chaque test.Timeout milliseconds— Timeout est obligatoire. milliseconds est évalué une seule fois avant le premier test : Integer 0..2147483647. Nombres négatifs, fractions et Strings provoquent une erreur avant condition. Zéro permet seulement le test immédiat. Ailleurs, timeout reste un nom de variable valide.
Retour
L’instruction ne renvoie rien. Le succès passe à la ligne suivante ; l’expiration produit une erreur avec fichier et ligne, traitable par Try/Catch ou On Error. Sinon l’exécution courante échoue. Aucun false automatique : l’exemple 2 construit explicitement une fonction renvoyant True/1 ou False/0.
Comportement
- Le moteur mémorise la durée et démarre un Stopwatch monotone. Le premier test immédiat peut réussir même avec zéro délai. Après false, la boucle vérifie annulation et pause, calcule le temps restant et attend au plus 10 ms avant de tester à nouveau. Elle évite une boucle active permanente ; l’ordonnanceur peut prolonger l’intervalle.
- La pause suspend les tests, mais le temps réel écoulé compte dans le délai. À la reprise, un délai expiré est signalé avant un nouveau test. L’arrêt interrompt l’attente et ignore Catch/Finally du script comme les autres annulations d’urgence. Un appel bloqué dans condition ne peut pas être interrompu de force : gardez les fonctions courtes. Un test commencé termine avant le traitement de son résultat ou erreur.
- L’erreur de condition reste intacte, sans devenir un timeout. Erreurs ordinaires et expirations exécutent les Finally concernés. Les variables appartiennent à l’appel courant ; chaque nouvelle entrée crée un nouveau délai. Ni End Wait ni paramètre d’intervalle supplémentaire. Wait(milliseconds) reste une fonction de délai distincte.
Exemples
1. Interroger une fonction avec une limite
# checks commence à 0 ; Ready le reçoit ByRef et l’incrémente par test. required=3 est ByVal ; budget=5000 autorise cinq secondes. Deux tests donnent false, le troisième true ; Main renvoie Integer 3. C’est une démonstration déterministe, sans simulation de serveur ; remplacez la condition par votre contrôle réel.
Option Explicit On
Function Ready(ByRef checks As Integer, ByVal required As Integer) As Boolean
checks += 1
Return checks >= required
End Function
Sub Main()
Dim checks As Integer = 0
Const budget = 5000
Wait Until Ready(checks, 3) Timeout budget
Return checks
End Sub
Explication des paramètres et du déroulement:
checks commence à 0 ; Ready le reçoit ByRef et l’incrémente par test. required=3 est ByVal ; budget=5000 autorise cinq secondes. Deux tests donnent false, le troisième true ; Main renvoie Integer 3. C’est une démonstration déterministe, sans simulation de serveur ; remplacez la condition par votre contrôle réel.
2. Créer une fonction renvoyant Boolean
# TryWait reçoit ready=False et budget=0. Le test immédiat échoue avec un timeout. Catch problem renvoie False ; Main renvoie 0, comparable à False. ready=True donnerait 1/True. Cette fonction intercepte toutes les erreurs : examinez problem pour les distinguer. ready est une valeur Boolean, pas un callback.
Option Explicit On
Function TryWait(ByVal ready As Boolean, ByVal budget As Integer) As Boolean
Try
Wait Until ready Timeout budget
Return True
Catch problem
Return False
End Try
End Function
Sub Main()
Dim success = TryWait(False, 0)
Return success
End Sub
Explication des paramètres et du déroulement:
TryWait reçoit ready=False et budget=0. Le test immédiat échoue avec un timeout. Catch problem renvoie False ; Main renvoie 0, comparable à False. ready=True donnerait 1/True. Cette fonction intercepte toutes les erreurs : examinez problem pour les distinguer. ready est une valeur Boolean, pas un callback.
3. Conserver une erreur et finaliser
# CheckStatus reçoit state=-1 et lance immédiatement "disconnected". Le délai de 3000 ms ne remplace pas l’erreur. Catch copie problem dans message ; Finally fixe finished=True/1. Main renvoie "disconnected:1". state=1 réussirait immédiatement, state=0 resterait false jusqu’au délai. Aucune connexion au jeu n’est nécessaire.
Option Explicit On
Function CheckStatus(ByVal state As Integer) As Boolean
If state < 0 Then
Throw "disconnected"
End If
Return state = 1
End Function
Sub Main()
Dim message = ""
Dim finished = False
Try
Wait Until CheckStatus(-1) Timeout 3000
Catch problem
message = problem
Finally
finished = True
End Try
Return message & ":" & CStr(finished)
End Sub
Explication des paramètres et du déroulement:
CheckStatus reçoit state=-1 et lance immédiatement "disconnected". Le délai de 3000 ms ne remplace pas l’erreur. Catch copie problem dans message ; Finally fixe finished=True/1. Main renvoie "disconnected:1". state=1 réussirait immédiatement, state=0 resterait false jusqu’au délai. Aucune connexion au jeu n’est nécessaire.