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. IT人士感悟(转)

    我今年39岁了,25岁研究生毕业,工作14年,回头看看,应该说走了不少的弯路,有一些经验和教训.现在开一个小公司,赚的钱刚够养家糊口的.看看这些刚毕业的学生,对前景也很迷茫,想抛砖引玉,谈谈自己的看法 ...

  2. spring的条件装配bean

    1 应用程序环境的迁移 问题: 开发软件时,有一个很大的挑战,就是将应用程序从一个环境迁移到另一个环境. 例如,开发环境中很多方式的处理并不适合生产环境,迁移后需要修改,这个过程可能会莫名的出现很多b ...

  3. java map 分析

    java 8 对HashMap进行了优化, 当碰撞时使用TreeNode的二分方法查找数据: 但是当数据碰撞厉害的时候, table有很多浪费. table 大小等于size/factor, 当碰撞很 ...

  4. Java开发岗位面试题归类---怎么好好的准备面试,也算是发展学习方向

    转载:http://blog.csdn.net/qq_27093465/article/details/52181860 一.Java基础 1. String类为什么是final的. 自己找的参考答案 ...

  5. JMS与Spring之一(用JmsTemplate同步收发消息) --转

    转自:http://blog.csdn.net/moonsheep_liu/article/details/6683190

  6. Java Nio Socket通讯

    Server端: #############服务器端连接请求处理############### public class MultiplexerServer implements Runnable { ...

  7. Windows下Android开发环境配置

    最新更新,见我新博客http://www.hrwhisper.me/java-android-environment-genymotion-emulator/ 更新了使用使用genymotion神级模 ...

  8. for in 与 Object.keys 与 hasOwnProperty区别

    1.结论 for in遍历对象所有可枚举属性 包括原型链上的属性 Object.keys遍历对象所有可枚举属性 不包括原型链上的属性 hasOwnProperty 检查对象是否包含属性名,无法检查原型 ...

  9. Apache James 发送邮件到外网

    在config.xml文件中查找到<dnsserver>然后把默认的<server> 127.0.0.1</server> 改成如下形式:<dnsserver ...

  10. 仿网易/QQ空间视频列表滚动连播炫酷效果

    代码地址如下:http://www.demodashi.com/demo/11201.html 一.准备工作 AndroidStudio 开发环境 需要下载七牛的开源播放器SDK 本例子实现了仿网易/ ...