Syntaxe
Lance une étiquette comme tâche coopérative, qui tourne à côté du programme principal, et range son handle dans une variable.
<handle> AS TASKHANDLE
<handle> AS JOB
STARTTASK <handle>, <label>
<label>:
<statements>
RETURN <value>Les éléments
| <handle> | Une variable simple qui reçoit le handle de la tâche. Déclarée AS TASKHANDLE ou AS JOB (le même type), elle vaut d’abord NULL et n’accepte que des tâches. |
|---|---|
| <label> | Le nom d’une étiquette du programme. Elle doit exister : "Unknown BASIC task label". |
| <statements> | Le travail de la tâche. Elle partage les variables du programme. |
| <value> | Le résultat de la tâche, lu ensuite avec TaskResult(). |
À savoir
- La tâche ne démarre pas tout de suite. Elle commence quand le programme principal cède la main : Sync(), Wait(),
AWAITTASK… - Les tâches sont coopératives : un seul morceau de code tourne à la fois, et elles se relaient seulement lors d’une cession.
- Le handle doit être une variable simple.
STARTTASK jobs[1], Workercompile, mais le programme ne peut pas démarrer. Lancez dans une variable, puis copiez-la. STARTTASKcrée la variable si besoin, même sousOPTION EXPLICIT. Affecter autre chose qu’une tâche à un handle typé arrête le programme avecBASIC value is not a task handle.- Un
RETURNnu ne laisse aucun résultat utilisable. Une erreur dans une tâche que personne n’attend reste muette : seuleTaskFailed()la montre. STARTTASKest permis dans uneFUNCTION. Dans l’étiquette, mettez chaque cession sur sa propre ligne, sans commentaire derrière (voirYieldTask()).
Exemple
loader AS TASKHANDLESTARTTASK loader, LoadLevelConsole("started") ' startedDO IF TaskDone(loader) Console("rooms: " + Str(TaskResult(loader))) ' rooms: 3 EXIT ENDIF Sync()LOOPLoadLevel: FOR room = 1 TO 3 ' one room per frame Sync() NEXTRETURN 3Dans le manuel : La boucle de jeu et les tâches