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下使用C++ Json库

    安装Json库 1.下载JsonCpphttp://sourceforge.net/projects/jsoncpp/files/ 2.下载sconshttp://sourceforge.net/pr ...

  2. Appium九宫格滑动解锁

    1.适配各种机型,首先获取整个解锁元素的坐标 2.代码实现 WebElement lockPattern = driver.findElement(By.id("com.android.se ...

  3. iOS12适配指南

    1.重复文件报错 build Phases-> 删除多余的info.plist 2.library not found for -lstdc++ 苹果在XCode10和iOS12中移除了libs ...

  4. RxAndroid 的基本使用

    1.基本概念 Rx是RxJava针对Android的定制版本.这个版本中通过增加最少的类使在Android应用中编写响应式组件简单而且无障碍,特别之处在与它还提供了一个Scheduler,可以在主线程 ...

  5. 设计模式 - 迭代器模式(iterator pattern) 具体解释

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

  6. vscode Gitlens插件 查看代码提交

    GitLens

  7. Linux 文件系统类型 文件系统结构 与Windows文件系统的比较

    摘自:http://blog.csdn.net/gelivable007/article/details/7249365 Linux 文件系统类型 磁盘文件系统.包括硬盘.CD-ROM.DVD.USB ...

  8. 基于layui的框架模版,采用模块化设计,接口分离,组件化思想

    代码地址如下:http://www.demodashi.com/demo/13362.html 1. 准备工作 编辑器vscode,需要安装liveServer插件在前端开启静态服务器 或者使用hbu ...

  9. IT精英们不断上演的十大傻事(组图)

    http://fellow.51cto.com/art/200807/80475.htm

  10. windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决

    windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决 一.发现问题 由于tomcat内存溢出,在wind ...