STARTTASK

Instruction

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], Worker compile, mais le programme ne peut pas démarrer. Lancez dans une variable, puis copiez-la.
  • STARTTASK crée la variable si besoin, même sous OPTION EXPLICIT. Affecter autre chose qu’une tâche à un handle typé arrête le programme avec BASIC value is not a task handle.
  • Un RETURN nu ne laisse aucun résultat utilisable. Une erreur dans une tâche que personne n’attend reste muette : seule TaskFailed() la montre.
  • STARTTASK est permis dans une FUNCTION. Dans l’étiquette, mettez chaque cession sur sa propre ligne, sans commentaire derrière (voir YieldTask()).

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 3

Commandes associées