Difference between revisions of "love.thread (Français)"

(Functions)
m (Notice fixed)
 
(One intermediate revision by one other user not shown)
Line 6: Line 6:
 
Tous les objets LÖVE (userdata) sont partagé parmi les threads, vous n'avez donc qu'à fournir leurs références entre les threads. Vous pourriez avoir des problèmes de concurrence si vous manipulez un objet dans différentes threads au même moment.
 
Tous les objets LÖVE (userdata) sont partagé parmi les threads, vous n'avez donc qu'à fournir leurs références entre les threads. Vous pourriez avoir des problèmes de concurrence si vous manipulez un objet dans différentes threads au même moment.
  
Lorsqu'un [[Thread]] est démarré, il ne charge que le module love.thread. Chacun des autres modules doivent être charges par un  [[require]].
+
Lorsqu'un [[Thread (Français)|Thread]] est démarré, il ne charge que le module love.thread. Chacun des autres modules doivent être charges par un  [[require (Français)|require]].
  
{{notice (Français)|Les modules [[love.graphics]], [[love.window]], [[love.joystick]], [[love.keyboard]], [[love.mouse]], et [[love.touch]] ont différentes restrictions et ne peuvent donc être utilisée que dans la thread principale.}}
+
{{notice (Français)|Les modules [[love.graphics (Français)|love.graphics]], [[love.window (Français)|love.window]], [[love.joystick (Français)|love.joystick]], [[love.keyboard (Français)|love.keyboard]], [[love.mouse (Français)|love.mouse]], et [[love.touch (Français)|love.touch]] ont différentes restrictions et ne peuvent donc être utilisée que dans la thread principale.}}
{{notice (Français)|Vous ne verrez aucune des erreurs générée par votre thread, à moins que vous ne définissiez la fonction de rappel [[love.threaderror]]  ou que vous n'appelliez [[Thread:getError]].}}
+
{{notice (Français)|Vous ne verrez aucune des erreurs générée par votre thread, à moins que vous ne définissiez la fonction de rappel [[love.threaderror (Français)|love.threaderror]]  ou que vous n’appeliez [[Thread:getError (Français)|Thread:getError]].}}
{{notice|Sous Android, vous devez vous assurer que toute les threads sont terminées avant de [[love.event.quit|quitter/redémarrer]], autrement LOVE ne pourra pas à redémarrer !}}
+
{{notice|Sous Android, vous devez vous assurer que toute les threads sont terminées avant de [[love.event.quit (Français)|quitter/redémarrer]], autrement LOVE ne pourra pas à redémarrer !}}
  
 
== Types ==
 
== Types ==
{{#ask: [[Category:Types]] [[parent::love.thread (Français)]] [[Concept:Current]]
+
{{#ask: [[Category:Types (Français)]] [[parent::love.thread (Français)]] [[Concept:Current]]
 
| headers=hide
 
| headers=hide
 
| format=template
 
| format=template
Line 25: Line 25:
  
 
== Functions ==
 
== Functions ==
{{#ask: [[Category:Functions]] [[parent::love.thread]] [[Concept:Current]]
+
{{#ask: [[Category:Functions (Français)]] [[parent::love.thread (Français)]] [[Concept:Current]]
 
| headers=hide
 
| headers=hide
 
| format=template
 
| format=template
Line 42: Line 42:
 
Un exemple simple montrant l'utilisation générale d'un thread et utilisant les channels (canaux) pour la communication.
 
Un exemple simple montrant l'utilisation générale d'un thread et utilisant les channels (canaux) pour la communication.
 
<source lang="lua">
 
<source lang="lua">
-- Ceci est le code qui s'exécutera sur notre thread. il dévrait être déplacé
+
-- Ceci est le code qui s'exécutera sur notre thread. il devrait être déplacé
 
-- sur son propre fichier Lua dédié, mais nous le créons ici par simplification
 
-- sur son propre fichier Lua dédié, mais nous le créons ici par simplification
 
local threadCode = [[
 
local threadCode = [[
Line 51: Line 51:
 
     -- Le Channel (canal) est utilisé pour gérer les communications entre notre
 
     -- Le Channel (canal) est utilisé pour gérer les communications entre notre
 
     -- thread principal et celui-ci. À chaque itération de la boucle, il poussera
 
     -- thread principal et celui-ci. À chaque itération de la boucle, il poussera
     -- un message vers celui-ci, qui peut emettre / recevoir du thread principal.
+
     -- un message vers celui-ci, qui peut émettre / recevoir du thread principal.
 
     love.thread.getChannel( 'info' ):push( i )
 
     love.thread.getChannel( 'info' ):push( i )
 
end
 
end
Line 57: Line 57:
  
 
local thread -- Notre objet thread.
 
local thread -- Notre objet thread.
local timer  -- Un chronométre utilisé pour animer notre cercle.
+
local timer  -- Un chronomètre utilisé pour animer notre cercle.
  
 
function love.load()
 
function love.load()
Line 87: Line 87:
 
== Voir également ==
 
== Voir également ==
 
* [[parent::love (Français)]]
 
* [[parent::love (Français)]]
 
+
{{#set:Since=070}}
 
== Autres langues ==
 
== Autres langues ==
 
{{i18n|love.thread}}
 
{{i18n|love.thread}}

Latest revision as of 06:45, 17 August 2021

Disponible depuis LÖVE 0.7.0
Ce-tte module n'est pas supporté-e par des versions plus anciennes.

Vous permet d'utiliser des threads (fils exécution).

Les threads (fils exécution) sont des environnements Lua séparés, s'exécutant en parallèle au code principal. Comme leur code s'exécute séparément, ils peuvent être utiliser pour calculer des opérations complexes sans affecter de façon nefaste le taux de rafraîchissement du thread principal. Toutefois, comme il s'agit d'environnements séparés, ils ne peuvent accéder aux variables et fonctions du thread principal, et les communications entre les threads sont limités.

Tous les objets LÖVE (userdata) sont partagé parmi les threads, vous n'avez donc qu'à fournir leurs références entre les threads. Vous pourriez avoir des problèmes de concurrence si vous manipulez un objet dans différentes threads au même moment.

Lorsqu'un Thread est démarré, il ne charge que le module love.thread. Chacun des autres modules doivent être charges par un require.

O.png Les modules love.graphics, love.window, love.joystick, love.keyboard, love.mouse, et love.touch ont différentes restrictions et ne peuvent donc être utilisée que dans la thread principale.  


O.png Vous ne verrez aucune des erreurs générée par votre thread, à moins que vous ne définissiez la fonction de rappel love.threaderror ou que vous n’appeliez Thread:getError.  


O.png Sous Android, vous devez vous assurer que toute les threads sont terminées avant de quitter/redémarrer, autrement LOVE ne pourra pas à redémarrer !  


Types

Channel (Français) Un objet pouvant être utilisé pour envoyer et recevoir de données entre les threads (fils d'exécution). Added since 0.9.0
Thread (Français) Un Thread représente un fil d'exécution (thread). Added since 0.7.0

Functions

love.thread.getChannel (Français) Crée ou récupère un channel de thread nomée.
love.thread.newChannel (Français) Crée un Channel (canal) de Thread (fil d’exécution) sans nom.
love.thread.newThread (Français) Crée une nouvelle Thread depuis un nom de fichier, une chaîne de caractères ou un objet FileData contenant du code Lua.


Exemples

Un exemple simple montrant l'utilisation générale d'un thread et utilisant les channels (canaux) pour la communication.

-- Ceci est le code qui s'exécutera sur notre thread. il devrait être déplacé
-- sur son propre fichier Lua dédié, mais nous le créons ici par simplification
local threadCode = [[
-- Reçoit les valeurs envoyées via thread:start
local min, max = ...

for i = min, max do
    -- Le Channel (canal) est utilisé pour gérer les communications entre notre
    -- thread principal et celui-ci. À chaque itération de la boucle, il poussera
    -- un message vers celui-ci, qui peut émettre / recevoir du thread principal.
    love.thread.getChannel( 'info' ):push( i )
end
]]

local thread -- Notre objet thread.
local timer  -- Un chronomètre utilisé pour animer notre cercle.

function love.load()
    thread = love.thread.newThread( threadCode )
    thread:start( 99, 1000 )
end

function love.update( dt )
    timer = timer and timer + dt or 0

    -- S'assure qu'aucune erreur ne se produit.
    local error = thread:getError()
    assert( not error, error )
end

function love.draw()
    -- Récupère l'info de channel et lui émet (pop) le message suivant.
    local info = love.thread.getChannel( 'info' ):pop()
    if info then
        love.graphics.print( info, 10, 10 )
    end

    -- Nous animons, un cercle, avec fluidité, afin de montrer que le thread n'est pas bloquant pour
    -- notre thread principal.
    love.graphics.circle( 'line', 100 + math.sin( timer ) * 20, 100 + math.cos( timer ) * 20, 20 )
end

Voir également

Autres langues