Menu
Coddy logo textTech

Vérifier l’état d’une coroutine

Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 52 sur 54.

Lorsque vous travaillez avec des coroutines, vous aurez souvent besoin de savoir dans quel état se trouve une coroutine. Est-elle en cours d’exécution ? Est-elle en pause et en attente de reprendre son exécution ? A-t-elle terminé son exécution ?

Lua fournit la fonction coroutine.status() pour répondre à ces questions.

La fonction coroutine.status() prend une coroutine comme argument et renvoie une chaîne décrivant son état actuel. Il existe trois états possibles :

"suspended"La coroutine est en pause à un yield() et peut être reprise
"running"La coroutine est en cours d’exécution
"dead"La coroutine a terminé son exécution et ne peut plus être reprise

Voici comment l'utiliser :

function task()
    coroutine.yield()
    print("Finishing")
end

local co = coroutine.create(task)
print(coroutine.status(co))  -- "suspended"

coroutine.resume(co)
print(coroutine.status(co))  -- "suspended" (en pause au yield)

coroutine.resume(co)
print(coroutine.status(co))  -- "dead" (terminé)
challenge icon

Défi

Facile

Écris une fonction checkCoroutineLifecycle qui prend resumeCount et renvoie une chaîne indiquant le statut d'une coroutine à différents moments de son cycle de vie.

Crée une coroutine qui cède une fois, puis se termine. Vérifie et enregistre son statut après sa création, après le premier resume (lorsqu'elle est en pause au niveau de yield), puis après les resumes suivants en fonction de resumeCount.

Logique :

  • Crée une fonction qui renvoie la chaîne "paused" une fois, puis se termine
  • Encapsule cette fonction dans une coroutine à l'aide de coroutine.create()
  • Vérifie le statut immédiatement après la création à l'aide de coroutine.status()
  • Reprends la coroutine une fois et vérifie à nouveau son statut
  • Reprends la coroutine autant de fois supplémentaires que l'indique resumeCount - 1 (nombre total de reprises = resumeCount)
  • Vérifie le statut final après toutes les reprises
  • Renvoie une chaîne contenant les trois statuts au format suivant : initial: [status]\\nafter first resume: [status]\\nfinal: [status]

Paramètres :

  • resumeCount (nombre) : Nombre total de fois où reprendre la coroutine (minimum 1)

Renvoie : Une chaîne indiquant le statut de la coroutine à trois moments de son cycle de vie (chaîne). Format : initial: suspended\nafter first resume: suspended\nfinal: dead

Essayez vous-même

function checkCoroutineLifecycle(resumeCount)
    -- Écrire le code ici
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux

Entraînez-vous par vous-même : Compilateur Lua en ligne