Jump to content

Coroutine .


Recommended Posts

Yop' , donc j'ai remarquer que Mta sa ne prend pas en compte les coroutine depuis la 1.5 d’après le wiki , déja une coroutine c'est quoi ? d’après wxlua une coroutine est similaire a un thread un processus qui exécute plusieurs Thread qui semble s’exécuter en parallèle :

  
Tout d'abord, un petit rappel sur ce qu'est un thread: 
Un thread est similaire à un processus, car tous deux représentent l'exécution d'un ensemble d'instructions du langage machine d'un processeur. 
Et du point de vue de l'utilisateur, ces exécutions semblent se dérouler en parallèle.  
Mais, là où chaque processus possède sa propre mémoire virtuelle, les threads d'un même processus se partagent sa mémoire virtuelle. 
Comme exemple d'application, l'on peut citer les traitements de texte où la correction orthographique est exécutée tout en permettant à l'utilisateur de continuer à entrer son texte. 
En Lua, une coroutine est similaire à un thread et représente une ligne d'exécution avec sa propre pile, ses propres variables locales et son pointeur d'instruction propre. 
  
La principale différence est que si un programme peut fonctionner avec plusieurs threads simultanés, il ne pourra en revanche ne faire tourner qu'une seule coroutine à la fois. 
  
Le système des coroutines est un système collaboratif, une coroutine s'exécute, puis passe la main à une autre, et ainsi de suite. 
  
Une coroutine, va donc permettre de faire exécuter un programme en tâche de fond, sans ralentir celui du premier plan. 

vous alez me dire : " qu'est ce qu'on a foutre ?! " bah plusieurs Gamemode utilise cette fonction dont le Gamemode qui me sert de base ( Fairplay Gaming https://github.com/Socialz/lua-mta-fairplay ) comme mta ne les prends plus en compte bah on a de jolies erreurs :

  
cannot resume dead coroutine [string "?"] 
  

Mais en jouant avec un IDE lua j'ai compris que depuis la dernière version du lua les coroutine bug .

J'ai essayer de faire des print pour comprendre j'ai essayer avec un IDE lua le résultat avec ce code :

  
co = coroutine.create( function() 
    print("bonjour") 
end) 
  
    print(co)  
ce = coroutine.running() 
    coroutine.resume(co) 
    print("les thread en route \n",ce,coroutine.resume(co)) 
    print("cette coroutine est : ",coroutine.status(co)) 
  

ça retourne :

bonjour

les thread en route

thread: 0x7f8ddb3a0018 false cannot resume dead coroutine

cette coroutine est : dead

On dirait que

coroutine.resume() 

tue la coroutine ce qui est étrange ...

J'aimerai avoir votre avis dessus et si y'a un moyen de contourner ça merci :)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...