Difference between revisions of "love.thread (Français)"
(traduit un paragraphe non traduit) |
|||
Line 4: | Line 4: | ||
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. | 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]]. | Lorsqu'un [[Thread]] est démarré, il ne charge que le module love.thread. Chacun des autres modules doivent être charges par un [[require]]. |
Revision as of 15:46, 27 December 2020
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.
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. |
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. |
Types
Channel | An object which can be used to send and receive data between different threads. | 0.9.0 | |
Thread | A Thread represents a thread. | 0.7.0 |
Functions
love.thread.getChannel | Creates or retrieves a named thread channel. | 0.9.0 | |
love.thread.getThread | Look for a thread and get its object. | 0.7.0 | 0.9.0 |
love.thread.getThreads | Get all threads. | 0.7.0 | 0.9.0 |
love.thread.newChannel | Creates a new unnamed thread channel. | 0.9.0 | |
love.thread.newThread | Creates a new Thread from a filename, string or FileData object containing Lua code. | 0.7.0 |
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 dévrait ê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 emettre / 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
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info