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é)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
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
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() contre ipairs()Récapitulatif - Fiche de personnage2Fonctions supplémentaires de la bibliothèque table
table.concat()construction de tables et unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des meilleurs scores3Concepts avancés des fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu’est-ce qu’une fermeture ?Récapitulatif - Gestionnaire d’événements simple6Gestion des erreurs
La fonction error()Appels protégés avec pcall()Récapitulatif - Division sécurisée9Les coroutines pour débutants
Qu’est-ce qu’une coroutine ?créer et reprendre une coroutineMettre en pause avec coroutine.yield()reprendre et céderVérifier l’état d’une coroutineRécapitulatif - Générateur de nombresRécapitulatif - Calcul vectorielEntraînez-vous par vous-même : Compilateur Lua en ligne