love的thread是一个单独的lua运行环境,与主线程平行。因此可以用线程来处理

处理复杂的计算,不过由于隔离,线程不能访问主线程的变量和方法,而且进程

间通信也受限。

 
可以在线程里共享love的对象(userdata),只需要传递对象引用即可。同时,
你也可能会在多个线程里操作相同对象时遇到多线程编程中常见的问题,
 
thread启动后,只会加载自身,其它模块需要用require手动加载。graphics和
window模块只能在主线程里用。
线程之间可以通过消息来通信,消息支持boolean, string, number, Love userdata,  
简单的表不支持外部userdata (如Lua's files, LuaSocket, ENet, ...),函数,嵌套表.
可以用 love.thread.getChannel( name )(没有则创建,有则使用原来的)创建一个
通信的频道,在频道里可以使用push发送消息,pop获取消息,频道的具体用法请参考
http://www.love2d.org/wiki/Channel。一个线程里可以使用多个频道,多个线程里
可以用相同的频道通信。
 
没有想到好的例子,下面两个是来自论坛http://love2d.org/forums/viewtopic.php?f=4&t=76670
的例子。
 
 
1、阻塞模式,这个例子会一直等待,程序会失去响应,可以把thread.lua最后
一行改为c2:demand("")即可
 
-- main.lua
t = love.thread.newThread("thread.lua")
c1 = love.thread.newChannel()
c2 = love.thread.getChannel("cookie")
t:start(c1) --start()中的参数可以传递到thread里,thread用"..."接收
c2:supply(c1:demand())
-- thread.lua
c1 = ...--接收thread start()里传来的参数
c2 = love.thread.getChannel("cookie")
c1:supply("Hello, world!")
c2:push(c1:demand())
 
 
2、普通模式
-- main.lua
function love.load()
thread = love.thread.newThread("thread.lua")
channel = love.thread.getChannel("test")
thread:start()
i = {}
end
function love.update(dt)
v = channel:pop()
if v then
table.insert(i, v)
end
end
function love.draw()
love.graphics.print(tostring(i[]), , )
end
-- thread.lua
c = love.thread.getChannel("test") c:push("hi")
注意:demand()和supply()要成对使用,不然就会一直阻塞,程序失去响应。
 
从上面可以看到,可以利用thread做一些背景音乐控制,后台加载资源的工作,
利用线程通信还可以减少全局变量的使用。

love2d教程34--thread模块的更多相关文章

  1. [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY

    [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY ORDER BY SELECT <列名1>,<列名2>,<列名2>... FROM ORDER B ...

  2. 【Python@Thread】thread模块

    一.关于Python多线程 Python解释器中可以同时运行多个线程,但是再任意时刻只能有一个线程在解释器运行. Python虚拟机的访问是由全局解锁器(GIL)控制的,由GIL保证同时只有一个线程的 ...

  3. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  4. python全栈开发 * 线程锁 Thread 模块 其他 * 180730

    一,线程Thread模块1.效率更高(相对于进程) import time from multiprocessing import Process from threading import Thre ...

  5. python标准库介绍——33 thread 模块详解

    ?==thread 模块== (可选) ``thread`` 模块提为线程提供了一个低级 (low_level) 的接口, 如 [Example 3-6 #eg-3-6] 所示. 只有你在编译解释器时 ...

  6. Pytest权威教程07-Monkeypatching,对模块和环境进行Mock

    目录 Monkeypatching,对模块和环境进行Mock 简单示例如: 猴子补丁方法 Monkeypatching 返回对象: 构建mock类 全局补丁示例如:阻止"requests&q ...

  7. Directx11教程(34) 纹理映射(4)

    原文:Directx11教程(34) 纹理映射(4)     本篇教程中,我们尝试在myTutorialD3D_27中改变采样状态描述符的各种设置,看纹理贴图的方式有什么变化. 原始的代码是:     ...

  8. thread模块—Python多线程编程

    Thread 模块 *注:在实际使用过程中不建议使用 thread 进行多线程编程,本文档只为学习(或熟悉)多线程使用. Thread 模块除了派生线程外,还提供了基本的同步数据结构,称为锁对象(lo ...

  9. love2d教程33--window模块

    --love的window模块比较简单,直接贴代码了function love.load() io.stdout:setvbuf("no") -- 设置io为无缓存模式 --获取显 ...

随机推荐

  1. Linux驱动虚拟地址和物理地址的映射

    一般情况下,Linux系统中,进程的4GB内存空间被划分成为两个部分------用户空间和内核空间,大小分别为0~3G,3~4G. 用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间. ...

  2. 流畅的python第十八章使用asyncio包处理并发

    对比一个简单的多线程程序和对应的 asyncio 版,说明多线程和异步任务之间的关系asyncio.Future 类与 concurrent.futures.Future 类之间的区别摒弃线程或进程, ...

  3. python staticmethod,classmethod方法的使用和区别以及property装饰器的作用

    class Kls(object): def __init__(self, data): self.data = data def printd(self): print(self.data) @st ...

  4. humanoid ik unity 配件 animation的问题

    遇到这样一个问题 想给角色设置ik 以实现代码控制的 更为自然的 角色动作 比如角色头跟随点击转动 身体也有相应扭转 https://docs.unity3d.com/Manual/InverseKi ...

  5. 转: codereview 工具平台建设

    一.  Rietveld  code review  (一套工具系统与平台) 1. http://www.cnblogs.com/fang9159/archive/2012/07/20/2591690 ...

  6. vue - check-versions.js for packageConfig

    用来获取package.json关于node.npm版本信息

  7. python中的socket服务器(多线程)

    最近在写一个客户端和服务器的项目,使用了SocketServer模块,网上大多数都是TCP连接的例子,我在这总结一个UDP. 直接贴上代码 import threadingimport SocketS ...

  8. 【Python】学习笔记十:字典

    字典是Python中唯一的映射类型(哈希表) 字典的对象时可变的,但字典的键值必须是用不可变对象,并且一个字典中可以使用不同类型的键值 1.定义字典 dict={key1:value1,key2:va ...

  9. 如何取得jvm实例的cpu占用(转)

    时间 2014-08-29 17:11:34 田加国的博客 原文  http://www.tianjiaguo.com/programming-language/java-language/如何取得j ...

  10. CentOS搭建nginx与nginx-rtmp-module搭建流媒体服务器

    文章地址:http://blog.csdn.net/zph1234/article/details/52846223 本次搭建流媒体使用的环境是centos 7.0+nginx:让我们一起开始奇妙的流 ...